Redis分布式锁是分布式系统中协调多服务并发访问的关键技术,通过SETNX命令和过期时间实现互斥性,确保同一时刻只有一个客户端操作共享资源。其核心原理包括原子加锁(NX/PX)、Lua脚本安全解锁及WatchDog自动续期机制,有效解决锁超时和主从切换问题。面试高频考点涵盖RedLock算法、与ZooKeeper锁的对比及超时时间设置技巧。本文深度解析Redis分布式锁的实现细节与常见问题,附赠2025年Java面试宝典资源,助你轻松应对大厂技术面试挑战。
📌 2025年Java面试宝典(最新版)
🔹 链接:https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
🔹 提取码:9b3g
在分布式系统中,多个服务实例可能同时操作共享资源(比如库存扣减),而分布式锁就是协调这些并发操作的“守门员”。它的核心目标是保证同一时刻只有一个客户端能访问关键资源,避免数据错乱。
(分布式系统并发场景示意图)
传统单机锁(如Java的synchronized
)在分布式环境下失效,而Redis凭借高性能、原子操作支持(如SETNX
)和高可用特性(如Redis Cluster),成为分布式锁的首选。其核心原理是通过操作Redis的键值对实现互斥性。
客户端通过SET key value NX PX 30000
命令尝试获取锁:
# 示例命令:为订单ID:123加锁,超时30秒
SET order_lock:123 client1 NX PX 30000
关键点:
OK
,表示加锁成功;nil
,表示锁已被占用,需等待或重试。通过Lua脚本保证原子性删除:
if redis.call("GET", KEYS[1]) == ARGV[1] then
return redis.call("DEL", KEYS[1])
else
return 0
end
为什么用Lua?防止误删其他客户端的锁(如因网络延迟导致锁过期后误删)。
若业务执行时间超过锁过期时间,需自动续期。例如用Redisson的lockWatchdogTimeout
,后台线程定期检测并延长锁时间。
场景:客户端A加锁后阻塞超时,锁自动释放,客户端B加锁成功,此时A恢复后继续操作资源。
解法:
场景:主节点写入锁后宕机,从节点提升为主,但锁数据未同步。
解法:
Redis分布式锁和ZooKeeper锁的区别?
超时时间设置多少合理?
如果你正在准备面试,推荐使用面试鸭会员获取海量真题题库和解析!
👉 通过 面试鸭返利网 联系我,可返利25元,助你高效备战!
(面试鸭题库覆盖Java/后端/算法等热门方向)
SETNX
+过期时间实现互斥;返回首页:面试鸭返利网 获取更多面试资源!
(系统架构中分布式锁的应用场景)
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!
今日有支付宝大红包赶快领,手慢无
支付宝扫码领取1-8元无门槛红包