MST
星途 面试题库

面试题:缓存设计之使用Redis实现分布式锁的基础实践

在使用Redis实现分布式锁时,通常会用到哪些Redis命令?请简要说明每个命令在实现分布式锁过程中的作用。
43.3万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

在使用Redis实现分布式锁时,通常会用到以下Redis命令:

  1. SETNX(SET if Not eXists)
    • 作用:尝试将一个键值对设置到Redis中,只有当键不存在时才会设置成功。在分布式锁实现中,它用于尝试获取锁。如果SETNX命令返回1,表示成功获取到锁;返回0,表示锁已被其他客户端持有,获取锁失败。例如,客户端A执行SETNX lock_key unique_value,若返回1,则A获取到锁,unique_value可用于标识是哪个客户端获取了锁,以便后续解锁操作。
  2. EXPIRE
    • 作用:为指定的键设置过期时间。在分布式锁场景下,当获取锁成功后,为锁键设置一个过期时间是很有必要的,以防止因持有锁的客户端发生故障而导致锁永远无法释放,出现死锁情况。例如,客户端获取锁成功后执行EXPIRE lock_key lock_timeout,lock_timeout为锁的过期时长,单位为秒。这样即使客户端在持有锁期间出现问题,锁也会在一定时间后自动释放。
  3. GETSET
    • 作用:将给定键的值设置为新值,并返回该键原来的旧值。在某些分布式锁实现方案中,用于检查并更新锁的持有情况。例如,当客户端尝试重新获取锁(可能是锁即将过期需要续期)时,先使用GETSET获取当前锁的值并设置新的过期时间,如果获取到的值是自己之前设置的标识值,说明仍然持有锁,可以成功续期;否则说明锁已被其他客户端获取。
  4. DEL
    • 作用:删除指定的键。在分布式锁实现中,当持有锁的客户端完成任务后,使用DEL命令删除锁键来释放锁,让其他客户端有机会获取锁。例如,客户端A执行DEL lock_key,将锁从Redis中删除,释放资源。