redisson 锁流程 看门狗机制 线程id lua脚本

Redisson 是一个在 Java 中实现的 Redis 客户端,它提供了许多分布式对象和服务,如分布式锁、分布式集合、分布式映射等。Redisson 的锁机制是其核心功能之一,它使用了 Redis 的数据结构来实现分布式锁,并提供了看门狗机制来保证锁的安全性。

Redisson 锁流程

  1. 加锁

    • 客户端向 Redis 发送加锁请求。
    • Redisson 使用 Redis 的 SETNX 命令尝试在 Redis 中设置一个锁键,如果设置成功(返回 1),则客户端获得锁。
    • 如果设置失败(返回 0),说明锁已经被其他客户端持有,当前客户端需要等待。
  2. 锁续期(看门狗机制)

    • Redisson 引入了看门狗机制来自动延长锁的持有时间,防止锁因为超时而被自动释放。
    • 当客户端加锁成功后,会启动一个定时任务(看门狗),定期向 Redis 发送命令来更新锁的过期时间。
    • 客户端持有锁期间,只要定期向 Redis 发送命令,锁就不会因为超时而被释放。
  3. 解锁

    • 当客户端完成业务逻辑后,会向 Redis 发送解锁请求。
    • Redisson 使用 Redis 的 DEL 命令删除锁键,释放锁。
    • 如果有其他客户端在等待该锁,它们将有机会获得锁。

看门狗机制

  • 看门狗机制的主要作用是自动延长锁的持有时间,确保锁不会因为超时而被释放。
  • 当客户端持有锁时,它会启动一个定时任务(看门狗),定期向 Redis 发送命令来更新锁的过期时间。
  • 如果客户端崩溃或网络中断导致无法续期,锁会在达到其过期时间后被自动释放,其他客户端可以获取该锁。

线程ID Lua脚本

  • Redisson 使用 Lua 脚本来实现锁的加锁和解锁过程,以确保操作的原子性。
  • 在加锁时,Redisson 会使用 Lua 脚本在 Redis 中设置锁键,并将当前线程的 ID 作为锁的值。
  • 解锁时,Redisson 同样使用 Lua 脚本来检查锁的值(即线程 ID)是否与当前尝试解锁的线程 ID 匹配,以确保只有获得锁的线程才能解锁。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值