Redis 分布式锁实现(极简易懂版)
Redis 分布式锁是解决分布式系统中并发安全问题的最常用方案,核心目标:同一时间只有一个客户端能拿到锁,避免并发冲突。
实现原理 → 核心命令 → 完整实现 → 避坑要点 → 进阶方案。
一、核心原理
Redis 分布式锁基于SET命令的原子性实现:
SET lock_key unique_value NX PX 30000- lock_key:锁名称(比如:order🔒1001)
- unique_value:唯一标识(防止别人释放你的锁)
- NX:仅当 key 不存在时才设置(互斥核心)
- PX 30000:过期时间 30 秒(防止死锁)
一句话总结:谁能成功执行这条命令,谁就拿到锁。
二、最标准实现(生产可用)
1. 加锁(必须原子)
SET lock:order:1001 uuid123 NX PX 30000- 返回
OK= 加锁成功 - 返回
nil= 加锁失败
2. 解锁(必须原子,防止误删)
错误做法:直接DEL lock:order:1001
(会导致:A 锁超时自动释放,B 加锁,A 执行完把 B 的锁删了)
正确解锁(Lua 脚本,原子执行):
ifredis.call("get",KEYS[1])==ARGV[1]thenreturnredis