面试官:分布式锁怎么实现?Redis vs Zookeeper vs 数据库——从原理到 Redisson
引言 "你简历上写了分布式锁,说说怎么实现的?"——这是 Java 后端面试的高频题。大部分候选人的回答停留在"用 Redis 的 SETNX"——面试官追问三个问题就卡住了:锁过期了任务还没执行完怎么办?Redis 主从切换锁丢了怎么办?同一个线程递归调用能不能重入? 这三个问题才是分布式锁的真正考点:SETNX 只是"加锁"这一个动作,而分布式锁的完整语义包括——互斥、防死锁、可重入、防误删、续期、故障容忍。每一项都有对应的坑和解决方案。这篇文章从"为什么需要分布式锁"讲起,对比数据库/Redis/Zookeeper 三种实现的底层原理,再深入 Redisson 看门狗的自动续期机制,最后逐一拆解三大坑的成因与解法。 一、为什么需要分布式锁 1.1 本地锁管不住分布式场景 // 单机时代:synchronized / ReentrantLock 就能解决并发 public synchronized void deductStock(Long skuId) { Stock stock = stockMapper.selectBySkuId(skuId); if (stock.get....