Skip to content

面试速答(先看这里)

**一句话结论:**这个问题,其实本质上想问的就是Redis分布式锁的单点问题。

60秒标准回答:

这个问题,其实本质上想问的就是Redis分布式锁的单点问题

当使用集群模式部署的时候,如果master一个客户端在master节点加锁成功了,然后没来得及同步数据到其他节点上,他就挂了, 那么这时候如果选出一个新的节点,再有客户端来加锁的时候,就也能加锁成功,因为数据没来得及同步,新的master会认为这个key是不存在的

所以,基于以上的情况来说, A线程获取Redis分布式锁,但那一刻做了主从的切换,B线程能不能获取到锁有以下几种情况

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**当使用集群模式部署的时候,如果master一个客户端在master节点加锁成功了,然后没来得及同步数据到其他节点上,他就挂了, 那么这时候如果选出一个新的节点,再有客户端来加锁的时候,就也能加锁成功,因为数据没来得及同步,新的master会认为这个key是不存在的。
  • **要点2:**所以,基于以上的情况来说, A线程获取Redis分布式锁,但那一刻做了主从的切换,B线程能不能获取到锁有以下几种情况:
  • **要点3:**1、如果已完成主从同步,那么B线程无法加锁成功。
  • **要点4:**2、如果未来得及做主从同步,那么B线程可以加锁成功。

**记忆锚点:**master → Redis → 分布式锁 → A线程获取Redis分布式锁 → 线程能不能获取到锁 → RedLock

易错提醒:

  • 所以,基于以上的情况来说, A线程获取Redis分布式锁,但那一刻做了主从的切换,B线程能不能获取到锁有以下几种情况: 1、如果已完成主从同步,那么B线程无法加锁成功。
  • 如何避免单点问题的发生?

加分表达:

  • 这个问题,其实本质上想问的就是Redis分布式锁的单点问题。
  • 当使用集群模式部署的时候,如果master一个客户端在master节点加锁成功了,然后没来得及同步数据到其他节点上,他就挂了, 那么这时候如果选出一个新的节点,再有客户端来加锁的时候,就也能加锁成功,因为数据没来得及同步,新的master会认为这个key是不存在的。

追问准备:

  • 围绕「master」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Redis」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「分布式锁」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

这个问题,其实本质上想问的就是Redis分布式锁的单点问题。

问题是这样的:

当使用集群模式部署的时候,如果master一个客户端在master节点加锁成功了,然后没来得及同步数据到其他节点上,他就挂了, 那么这时候如果选出一个新的节点,再有客户端来加锁的时候,就也能加锁成功,因为数据没来得及同步,新的master会认为这个key是不存在的。

所以,基于以上的情况来说,A线程获取Redis分布式锁,但那一刻做了主从的切换,B线程能不能获取到锁有以下几种情况:

1、如果已完成主从同步,那么B线程无法加锁成功。

2、如果未来得及做主从同步,那么B线程可以加锁成功。

扩展知识 ​

如何避免单点问题的发生? ​

📄 ✅什么是RedLock,他解决了什么问题?

打开文档:✅什么是RedLock,他解决了什么问题?

RedLock被废弃 ​

📄 ✅Redisson 中为什么要废弃 RedLock,该用啥?

打开文档:✅Redisson 中为什么要废弃 RedLock,该用啥?