作者 | mushishi
来源 | urlify.cn/Mry6bi
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 也会加锁成功 , 这个时候锁的语义就被破坏了
文章插图
【redis实现分布式锁天然的缺陷】
推荐阅读
- RSA+AES实现接口验签和参数加密
- 电脑微信如何实现多开?
- 高校|1076万“打工人”即将进职场,如何实现就业?这个方向值得考虑
- 华为S5700设置acl,实现vlan三层隔离,让你小白变大神,转发收藏
- 百度C++工程师如何实现极致并发优化
- 教程 在浏览器中实现IPFS连接的指引
- Vue中使用v-viewer组件实现图片预览功能,支持Vue3
- 如何用Netty写一个高性能的分布式服务框架?
- jenkins+Acunetix实现自动化安全测试
- 捋一捋RedisTemplate