redis实现分布式锁天然的缺陷

redis实现分布式锁天然的缺陷

游戏|数码彩彩2025-02-04 8:00:33289A+A-

作者 | mushishi

来源 | urlify.cn/Mry6bi

redis分布式锁基本原理

采用 redis 实现分布式锁,主要是利用其单线程命令执行的特性,一般是 setnx, 只会有一个线程会执行成功,也就是只有一个线程能成功获取锁;看着很完美

看看可能有什么问题?

一般生产环境为了可用性,redis 会部署 master-slave + sentinel 的结构, 如:

redis实现分布式锁天然的缺陷

 


master 提供服务、slave standby 作为备份节点不提供服务, master异步将数据复制给 slave 以保证数据一致, sentinel哨兵检查 master节点,当master节点故障时 将slave节点提升为 新的master 对外提供服务;

正常情况下,都是当前 master 对外提供服务,多个线程 setnx 只会有一个成功

redis实现分布式锁天然的缺陷

 

当 master 故障时

线上环境嘛,总会有各种各样的故障出现,这也是为什么要部署 ha 的原因;

我们设想,thread-1 setnx a 1 成功后,master节点发生故障;但是,此时 a=1 这条数据还没来得及同步到 slave 节点,然后 sentinel 哨兵会进行故障切换将 slave 提升上来对外提供服务, 然后 thread-2 来 setnx a 1 加锁,因为之前锁状态在 slave 不存在,那这时候 thread-2 也会加锁成功, 这个时候锁的语义就被破坏了

redis实现分布式锁天然的缺陷

 

 

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈