Redis分布式锁基本原理
采用 redis 实现分布式锁,主要是利用其单线程命令执行的特性,一般是 setnx, 只会有一个线程会执行成功,也就是只有一个线程能成功获取锁;看着很完美。
然而——
看看可能有什么问题?
一般生产环境为了可用性,redis 会部署 master-slave + sentinel 的结构, 如:
master 提供服务、slave standby 作为备份节点不提供服务, master异步将数据复制给 slave 以保证数据一致, sentinel哨兵检查 master节点,当master节点故障时 将slave节点提升为 新的master 对外提供服务;
正常情况下,都是当前 master 对外提供服务,多个线程 setnx 只会有一个成功
当 master 故障时
线上环境嘛,总会有各种各样的故障出现,这也是为什么要部署 ha 的原因ÿ