如何利用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分布式锁实现控制并发操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇: 对自己的产品就是这么有信心