Redis分布式锁是实现分布式系统协调的关键技术,通过SET key value NX EX命令实现原子性加锁与过期时间设置,避免死锁。核心要点包括:使用唯一标识(如UUID)防止误删锁、Redisson的watchdog机制实现锁续期、主从架构下采用RedLock算法应对锁失效问题。相比Zookeeper的CP模型,Redis基于AP模型提供更高性能,适合秒杀等高并发场景。面试中需深入理解锁超时处理、业务幂等设计等细节,掌握这些原理能有效提升分布式系统开发能力。
2025年Java面试宝典点击领取(提取码:9b3g)
咱们面试中经常会被问分布式锁的实现原理,尤其是Redis方案。很多同学可能背过"setnx加过期时间",但面试官更想听到你对底层机制的思考。Redis分布式锁的核心在于单线程原子性和过期时间兜底,但细节才是区分普通回答和高分答案的关键。
举个实际场景:电商秒杀系统中,100台服务器同时扣减库存。如果不加锁,可能出现超卖。单机锁(如synchronized)只能控制单个JVM的线程,而Redis分布式锁能跨进程协调资源,这才是分布式系统的核心需求。
直接说setnx就out了!现在都用SET key value NX EX 30
这种原子命令。NX表示不存在时设置,EX设置过期时间,这两个操作必须原子执行。如果分开执行setnx和expire,可能在设置过期时间前进程崩溃,导致死锁。
很多新手会忽略这点:锁value必须用唯一标识(比如UUID+线程ID)。假设线程A获取锁后阻塞,锁超时释放,线程B获取锁。此时A恢复后可能误删B的锁。通过value校验,保证只能删除自己加的锁。
默认30秒过期可能不够业务执行怎么办?需要起一个守护线程定时检测(比如每10秒),如果业务还在执行就延长锁时间。这就是Redisson的watchdog机制原理,也是很多开源框架的标准实现。
Q:Redis主从架构下锁失效怎么办?
A:这是著名的锁失效问题。比如主节点加锁后未同步到从节点就宕机,从节点升级为主后可能被其他客户端重复加锁。这时候需要RedLock算法(多个独立Redis实例),但要注意它也有争议,实际要根据业务容忍度选择方案。
Q:如何处理锁超时问题?
建议分三点回答:1)合理预估超时时间 2)实现锁续约机制 3)业务代码要做幂等设计。这里可以举订单支付的例子,即使重复扣款也要有对账机制。
Q:Redis和Zookeeper实现分布式锁的差异?
Redis是AP模型,性能高但可能出现极端情况下的锁失效;ZK是CP模型,通过临时顺序节点实现更可靠的锁,但性能较低。根据业务场景选择,比如金融交易用ZK,秒杀用Redis。
如果大家需要购买面试鸭会员,可以通过面试鸭返利网找我,返利25元。现在很多大厂面试官都在更新题库,及时获取最新面试题非常重要。
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!