首页/数据/数据库速查/分布式锁:SET NX PX 原子加锁
Redis 运维与场景124 条

分布式锁:SET NX PX 原子加锁

Redis 分布式锁的标准加锁方式:用一条 SET key value NX PX ms 同时完成「不存在才创建」与「过期自动释放」,value 用唯一 token 标识持有者,便于安全释放。

数据库速查数据更新于 2026-10-12

加锁与观察

加锁与观察
# 加锁:NX=不存在才设置;PX=毫秒级过期(EX 为秒)
SET lock:order:42 6f1d2c4e NX PX 10000
#  -> OK    拿到锁
#  -> (nil) 别人持有,稍后重试或快速失败

# 查看锁当前值/剩余时间(调试用)
GET lock:order:42
PTTL lock:order:42
语法SET lock:<资源> <token> NX PX <毫秒>
tokenUUID 或 机器-线程-请求 唯一串,释放时校验
成败判断OK=加锁成功;nil=未拿到
建议TTL 取业务 P99 耗时的数倍,长任务配续期
释放不要直接 DEL:必须校验 token(见「锁的安全释放」);value 也不要写死。

易错点

  • 用 SETNX + EXPIRE 两条命令:中间宕机则锁永不过期,形成死锁
  • value 用固定字符串:任何客户端都能删掉别人的锁

数据来源与参考

  • Redis 官方文档: SET 命令
  • Redis 官方文档: 分布式锁

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌