Redis 如何实现分布式锁?
发布于
一、基本实现
SET lock_key unique_value NX EX 30
- NX:key 不存在才设置。
- EX:过期时间,防止死锁。
- unique_value:释放锁时校验,防止误删别人的锁。
二、释放锁(Lua 脚本保证原子)
if redis.call("get", KEYS[1]) == ARGV[1] then
return redis.call("del", KEYS[1])
end
return 0
三、Redisson 实现
- 可重入锁:维护计数器。
- 看门狗:业务未执行完自动续期(默认 30s,每 10s 检查)。
- 支持公平锁、读写锁、红锁。
四、注意事项
- 必须设置过期时间,防止持锁节点宕机导致死锁。
- 释放锁必须校验 value,避免误删。