如何利用Redis分布式锁实现控制并发操作

redis命令解释

说道redis的分布式锁都是通过setnx命令结合getset来实现的,在讲之前我们先了解下setnx和getset的意思,在redis官网是这样解释的

注:redis的命令都是原子操作

setnx key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 setnx 不做任何动作。

setnx 是『set if not exists』(如果不存在,则 set)的简写。

可用版本:

1.0.0+

时间复杂度:

o(1)

返回值:

设置成功,返回 1 。

设置失败,返回 0 。

getset key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

当 key 存在但不是字符串类型时,返回一个错误。

可用版本:

1.0.0+

时间复杂度:

o(1)

返回值:

返回给定 key 的旧值。

当 key 没有旧值时,也即是, key 不存在时,返回 nil 。

代码示例

注意:为了让分布式锁的算法更稳键些,持有锁的客户端在解锁之前应该再检查一次自己的锁是否已经超时,再去做del操作,因为可能客户端因为某个耗时的操作而挂起,操作完的时候锁因为超时已经被别人获得,这时就不必解锁了。

我们看下代码涉及以下几个类,这里有关业务逻辑相关的只定义了方法没有具体实现,关键是学习思路

orderbiz.java

orderlock.java

orderlockbiz.java

redisorderlock.java

以上这篇如何利用redis分布式锁实现控制并发操作就是www.887551.com分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持www.887551.com。

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐