Redis 分布式锁
Redis 实现分布式锁主要利用 Redis 的 setnx 命令。setnx 是 SET IF NOT EXISTS(如果不存在则 SET) 的简写。

Redis 实现分布式锁合理控制锁时长的方法
- 根据业务时间进行预估:不靠谱
- 给锁续期:推荐
Redis 实现分布式锁 - 执行流程
while 循环有时间限制

代码实现

Redis 实现分布式锁 - 可重入

Redis 实现分布式锁 - 主从一致性
在对主节点写入时,主节点突然宕机,于是选取一个从节点为主节点,这时候数据并没有同步到从节点,于是另一个请求去获取锁时可以获取成功,导致两个线程同时持有一把锁

红锁
不能只在一个 Redis 实例上创建锁,应该是在多个 Redis 实例上创建锁 (n / 2 + 1),避免在一个 Redis 实例上加锁。实际场景中很少使用红锁,主要有以下三个原因。
- 实现复杂
- 性能差
- 运维繁琐
Redis 是 AP 思想,只保证最终一致性,若想保证强一致性,建议使用 Zookeeper(CP 思想)。

面试回答

去尝试加锁,此时操作的是刚刚提升上来的 slave 节点,因为数据还没有及时同步,因此线程 2 也可以成功加锁,就导致有两把锁。

被折叠的 条评论
为什么被折叠?



