您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页redis实现分布式锁天然的缺陷

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

来源:飒榕旅游知识分享网
redis实现分布式锁天然的缺陷

redis分布式锁基本原理

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

看看可能有什么问题?

⼀般⽣产环境为了可⽤性,redis 会部署 master-slave + sentinel 的结构, 如:

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

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

当 master 故障时

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

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务