美文网首页
如何利用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