面试专栏:Redisson和RedLock实现分布式锁

Redisson

  1. 底层原理

    • Redisson是一个基于Redis的Java In-Memory Data Grid。它在Redis的基础上实现了分布式锁。
    • Redisson分布式锁基于Redis的SETNX命令和Lua脚本。
  2. 加锁解锁步骤

    • 加锁:使用SETNX设置锁,如果键不存在则加锁成功,同时设置锁的过期时间以避免死锁。
    • 解锁:通过发送Lua脚本到Redis服务器,确保解锁操作的原子性。

看门狗机制 

Redisson的“看门狗”(Watchdog)机制是指在Redisson的分布式锁实现中,用于防止客户端在持有锁的过程中由于各种原因(如崩溃或网络问题)而无法正常释放锁,导致其他客户端无法获取锁的情况。

  1. 自动续租

    • 当客户端获取到锁之后,Redisson会启动一个后台任务(看门狗),定期检查该锁的持有情况。
    • 如果客户端仍然持有该锁,则看门狗会自动为锁续租,即重新设置锁的过期时间。这样可以防止因为客户端长时间操作而导致锁过期的问题。
  2. 故障检测

    • 如果客户端因为故障(如崩溃、网络故障等)而失去对锁的控制,看门狗将无法为锁续租。
    • 一旦锁到达过期时间而没有被续租,它将自动释放,这样其他客户端就能够获取这个锁。
  3. 默认行为

    • Redisson的看门狗机制是默认开启的,通常不需要用户手动配置。
    • 默认情况下,看门狗的续租间隔时间较短,可以有效应对各种突发情况。

RedLock

  1. 底层原理

    • RedLock是由Redis的创造者提出的一种分布式锁算法。
    • 它建议在多个独立的Redis节点上实现锁,以提高容错性。
  2. 加锁解锁步骤

    • 加锁
      1. 向多个Redis实例尝试加锁,使用与Redisson类似的方式。
      2. 多数节点加锁成功则认为整体加锁成功。
      3. 如果加锁失败,则在所有实例上解锁。
    • 解锁:在所有Redis实例上释放锁。

RedLock算法本身并不提供内置的“看门狗”机制。RedLock的主要策略是在多个独立的Redis实例上实现锁,以提高容错性和安全性。在RedLock算法中,客户端负责锁的获取和释放,以及处理锁的续租。 

区别

  • 安全性:RedLock通过多个节点提高了分布式锁的容错和安全性。
  • 复杂性:RedLock相对于Redisson更复杂,因为它需要管理多个Redis实例。
  • 性能:由于RedLock在多个节点上操作,其性能可能低于单实例的Redisson。

总体来说,Redisson提供了一个简单且高效的单Redis节点的分布式锁实现,而RedLock通过在多个Redis节点上实现锁提供了更高的安全性和容错性。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nathaniel333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值