文章目录
问题
💬 Question 1
Q :Redis分布式锁是如何实现的?
A:Redis 分布式锁是通过 SETNX 命令实现的,因为 Redis 是单线程的,执行命令时具有原子性。使用 SETNX 可以确保同一时间只有一个客户端能成功设置某个 key,代表获得锁;在该 key 未过期或未被删除之前,其他客户端无法再获得该锁,从而实现分布式的互斥访问。
💬 Question 2
Q : 你是如何控制redis分布式锁的有效时长的呢?
A:在 Redisson 中,我们需要手动加锁,并且可以设置锁的最大持有时间和等待时间。在Redisson中会自动启用"看门狗机制",每隔特定的时间会检查当前线程是否还持有锁,如果是,则会自动续期,防止业务尚未完成时锁被自动释放。等到业务执行完后再显式释放锁即可。
💬 Question 3
Q :redisson实现的分布式锁是可重入的吗?
A:是可重入的,同一个线程在持有锁的情况下可以重复加锁,内部会通过线程标识和锁重入计数来管理,确保只有获取锁的线程才能释放,避免误删其他线程的锁。
💬 Question 4
Q :redisson实现的分布式锁能解决主从一致性的问题吗?
A:Redisson 的普通分布式锁不能完全解决主从一致性问题,因为 Redis 的主从复制是异步的,可能在主节点加锁成功但还未同步到从节点时主节点就宕机,导致锁丢失。为了解决这个问题,Redisson 提供了基于多个主节点的 RedLock 红锁机制,通过在多个 Redis 实例上加锁以增强一致性和容错能力。