Redisson面试题:RLock、Lua、PubSub与WatchDog
| 问题 | 标准回答 | 原理页 |
|---|---|---|
| RLock怎样可重入 | Redis Hash Field组合clientId和threadId,Value记录重入次数;同线程加锁递增,unlock递减到0才删除。 | 状态模型 |
| 为什么用Lua | 把判断所有权、修改重入计数和TTL放在Redis一次执行中,避免多命令竞态。 | 加锁Lua |
| 获取失败怎样等待 | 订阅释放Channel并结合TTL等待,被唤醒后重新执行加锁Lua;通知不是所有权证明。 | 等待通知 |
| WatchDog是什么 | 未指定固定leaseTime时,客户端定期确认仍持锁并刷新TTL;unlock或失去所有权后停止。 | WatchDog |
| 指定leaseTime还有WatchDog吗 | 通常不使用默认自动续期,锁到期自动释放,业务必须控制临界区最坏耗时。 | WatchDog |
| 为什么不能只用isLocked再unlock | isLocked不证明当前线程持有,检查后状态还可能变化;应由unlock Lua原子校验线程字段。 | 解锁 |
| 主从切换会不会双锁 | 可能。Master锁状态未异步复制就故障,新Master没有该锁;关键业务仍需数据库约束、幂等和Fencing。 | 失败窗口 |
| 信号量许可过期就能停止旧任务吗 | 不能。许可回收只允许新任务进入,旧任务可能仍运行,外部资源仍需幂等和Fencing。 | 信号量 |
| Redisson锁能替代事务吗 | 不能。锁只减少并发入口,不能保证数据库提交、远程副作用、回滚和补偿。 | 商业Demo |
本章小结
面试要从Redis状态、客户端等待和租期失败窗口回答,不能只说“Redisson有看门狗”。
