0
点赞
收藏
分享

微信扫一扫

Redis 分布式锁

魔都魅影梅杜萨 2022-05-02 阅读 67
  1. 分布式锁概念
  2. 分布式锁四种雷区
  3. 分布式锁特性
  4. 实现原理
    1. 加锁
      1. 使用set扩展命令,key:锁标识,value:持有当前锁线程标识,PX:超时时间(毫秒)。
      2. # 加锁命令
        set key value NX PX milliseconds
    2. 解锁

      1. 只有当前锁的持有者才可以执行删除操作,通过lua脚本保证了get和del命令执行的原子性操作。

      2. // 通过lua脚本,解决了 解铃还须系铃人 的问题。
        // 使用redis+lua脚本(保证原子性,减少网络开销)
        $script = <<<LUA
        local key=KEYS[1]
        local value=ARGV[1]
        if(redis.call('get', key) == value)
        then
        return redis.call('del', key)
        end
        LUA
        ;
        // 执行lua脚本
        $this->redis->eval($script, [$this->lockKey, $this->lockValue], 1);
    3. 绪期(进程占用时间太长,避免并发获得锁)
      1. $script    = <<<LUA
        if (redis.call('get', KEYS[1]) == ARGV[1])
        then
        return redis.call('expire', KEYS[1], ARGV[2])
        else
        return 0
        end
        LUA
        ;
        $this->redis->eval($script, [$this->lockKey,$this->lockValue,$this->expireTime], 1)
    4. RedLock算法
      1. 集群脑裂:集群脑裂指因为网络问题,导致 Redis master 节点跟 slave 节点和 sentinel 集群处于不同的网络分区,因为 sentinel 集群无法感知到 master 的存在,所以将 slave 节点提升为 master 节点,此时存在两个不同的 master 节点。Redis Cluster 集群部署方式同理。

 

转载于:Redlock(redis分布式锁)原理分析_狂奔的蜗牛Evan的博客-CSDN博客_redlock,百度安全验证https://baijiahao.baidu.com/s?id=1706527669583273516&wfr=spider&for=pc

举报

相关推荐

0 条评论