美文网首页
如何利用Redis分布式锁实现控制并发

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

作者: 机灵鬼鬼 | 来源:发表于2021-04-29 11:34 被阅读0次

这个场景相信大家都遇到过,其实我这里不想写具体代码逻辑,我主要说要实现这个策略,我们用到redis两个核心方法,即setNx和getSet。
注:redis的命令都是原子操作

1、SETNX

SETNX key value

可用版本: >= 1.0.0

时间复杂度: O(1)

只在键 key 不存在的情况下, 将键 key 的值设置为 value

若键 key 已经存在, 则 SETNX 命令不做任何动作。

SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。

返回值

命令在设置成功时返回 1 , 设置失败时返回 0

代买事例

redis> EXISTS lockkey                # lockkey不存在
(integer) 0

redis> SETNX lockkey "programmer"    # lockkey 设置成功
(integer) 1

redis> SETNX lockkey "code-farmer"   # 尝试覆盖 lockkey,失败
(integer) 0

redis> GET lockkey # 没有被覆盖
"programmer"

2、GETSET

GETSET key value

可用版本: >= 1.0.0

时间复杂度: O(1)

将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值。

返回值

返回给定键 key 的旧值。

如果键 key 没有旧值, 也即是说, 键 key 在被设置之前并不存在, 那么命令返回 nil

当键 key 存在但不是字符串类型时, 命令返回一个错误。
代码示例

redis> GETSET db mongodb    # 没有旧值,返回 nil
(nil)

redis> GET db
"mongodb"

redis> GETSET db redis      # 返回旧值 mongodb
"mongodb"

redis> GET db
"redis"

相关文章

网友评论

      本文标题:如何利用Redis分布式锁实现控制并发

      本文链接:https://www.haomeiwen.com/subject/fcairltx.html