Redis 分布式锁

1.Redis 分布式锁实现

采用 机器ID+线程ID 做为 value

抢到锁后只有value 匹配上 才能做操作【删除,续命(看门狗)】

java 复制代码
# 客户端A(机器1)加锁
SET lock_key 123 NX EX 30  

# 客户端A业务超时,锁过期自动释放
# 客户端B(机器2)抢到锁
SET lock_key 456 NX EX 30  

# 客户端A业务执行完,执行DEL lock_key → 误删了客户端B的锁!

2.看门狗是在客户端执行的

Redis 服务器本身是无状态的键值存储服务,它只负责执行你发过去的指令(比如 SET、EXPIRE、Lua 脚本),不会主动创建线程去监控 / 续期某个 key------ 所有 "主动行为"(比如定时检查、自动续期)都由客户端自己实现。

客户端线程发起请求,Redis 只负责执行脚本并返回结果,不会跑任何 "看门狗" 相关逻辑。

如果 Redis 服务器来管续期,会出现致命问题:

Redis 要为每个锁 key 维护一个监控线程,高并发下(比如 10 万个锁),Redis 会被线程调度压垮,性能暴跌;

Redis 是集群部署时,主从切换 / 分片迁移会导致监控线程丢失,续期逻辑失效;

违背 Redis"极简核心 + 客户端扩展" 的设计原则(Redis 只做最核心的存储,复杂逻辑交给客户端)。

相关推荐
爱好曙光16 小时前
Redis Cluster 槽迁移:MOVED 重定向与拓扑刷新实战
redis·cluster·性能调优·moved·槽迁移
这个DBA有点耶16 小时前
测试全绿,上线三周数据没入账——那个95%的兼容度报告,漏掉的是边界
数据库·mysql·架构
1024奇点16 小时前
【仓颉语言入门 · 第二篇 第 15 课】
开发语言·数据库·ide·开源
疯狂学习GIS16 小时前
将谷歌地球引擎账号升级为Contributor与Partner层级的方法
java·数据库·人工智能
gf132111117 小时前
python_高德地图驾车时长查询
数据库·python·mysql
萨小耶17 小时前
AI 面试答题链路源码分析:Redis 幂等、题目锁与状态机如何配合
人工智能·redis·面试
时间售卖铺17 小时前
MySQL 日志管理
运维·数据库·mysql·云原生
ZealSinger17 小时前
Boot4升后session_redis属性怎么改名
redis·springsession·boot4·升级踩坑
秋风点枝17 小时前
数据库 01 · 体系结构与存储引擎
数据库·mysql
CodeGL17 小时前
15、Python 访问数据库
数据库·python