上一题下一题

使用 Redis SET NX PX 实现分布式锁时,NX、PX 和唯一 token 分别解决什么问题?

进阶版
来源:meituan初级工程师唯一token锁标识SET NX PX语义Redis分布式锁
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

使用 SET key token NX PX milliseconds 获取分布式锁时:

NX :表示只有当 key 不存在时才设置成功,保证同一时刻只有一个客户端能够获取锁,实现互斥。 PX :设置锁的毫秒级过期时间。即使持锁客户端宕机或没有执行释放逻辑,锁也会自动过期,避免形成永久死锁。但过期时间需要结合业务执行时长设置,必要时使用续期机制。 唯一 token :作为当前锁的持有者标识,通常使用随机字符串或 UUID。释放锁时不能直接 DEL key,而是要先判断 key 的 value 是否等于自己的 token,只有相等时才删除,防止锁已经过期并被其他客户端重新获取后,旧客户端误删新客户端的锁。这个判断和删除要通过 Lua 脚本保证原子性。

例如释放锁时执行:if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end。

登录后查看完整内容