MST

星途 面试题库

面试题:Redis分布式锁实现原理中的核心要点

请阐述Redis分布式锁实现原理中的核心操作有哪些,例如SETNX命令在其中起到什么作用,以及如何处理锁的过期时间以避免死锁情况?
32.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

Redis分布式锁实现原理核心操作

  1. SETNX 命令
    • 作用:SETNX 是“SET if Not eXists”的缩写,即当且仅当 key 不存在时,才对 key 进行设置操作。在分布式锁实现中,多个客户端同时尝试使用 SETNX 命令去设置同一个 key(通常作为锁标识),只有一个客户端能够成功设置,该客户端就获得了锁。其他客户端设置失败,表明锁已被占用,只能等待锁的释放。例如,在一个电商抢购场景中,多个用户同时请求购买限量商品,通过 SETNX 来确保只有一个用户能获得购买锁,避免超卖。
  2. 处理锁的过期时间
    • 避免死锁:为了防止获得锁的客户端因为某些原因(如程序崩溃、网络故障等)未能及时释放锁,导致其他客户端永远无法获取锁(死锁情况),需要为锁设置一个过期时间。可以在使用 SETNX 成功设置锁后,紧接着使用 EXPIRE 命令为 key 设置过期时间。例如:
      SETNX lock_key unique_value
      EXPIRE lock_key expiration_time
      
    • 优化方式:在 Redis 2.6.12 版本之后,可以使用 SET 命令的扩展参数来一步完成设置锁和设置过期时间的操作,语法为 SET key value [EX seconds] [PX milliseconds] [NX|XX]。如 SET lock_key unique_value EX 10 NX,这样可以确保设置锁和设置过期时间这两个操作的原子性,进一步避免死锁。在实际应用中,过期时间的设置需要根据业务场景合理调整,时间过短可能导致锁频繁过期,业务处理未完成就丢失锁;时间过长则可能在客户端异常时,长时间占用锁资源。