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 只做最核心的存储,复杂逻辑交给客户端)。

相关推荐
Treh UNFO14 小时前
nginx的重定向
大数据·数据库·nginx
jvvz afqh14 小时前
mysql用户名怎么看
数据库·mysql
eDEs OLDE14 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
EXnf1SbYK14 小时前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK14 小时前
Redis分布式锁进阶第十一篇
数据库·redis·分布式
xiaohe0714 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
冬奇Lab14 小时前
RAG 系列(六):向量数据库——存储与检索的基础设施
数据库·人工智能·llm
vooy pktc14 小时前
macOS安装Redis
数据库·redis·macos
辞旧 lekkk14 小时前
【Qt】初识(上)
开发语言·数据库·qt·学习·萌新
落落121315 小时前
MySQL事务四大特性(ACID)
数据库