redisson作为分布式锁的底层实现

1. redisson如何实现尝试获取锁的逻辑

  • 如何实现在一段的时间内不断的尝试获取锁
    • 其实就是搞了个while循环,不断的去尝试获取锁资源。但是因为latch的存在会在给定的时间内处于休眠状态。
    • 这个事件,监听的是解锁动作,如果解锁动作发生。会调用latch.release方法,这样while循环又可以重新启动,去尝试获取锁资源了。(相比单纯的轮训,避免了对cpu资源的浪费。通过信号通知,避免了没必要的轮训)
  • 尝试获取锁的过程是怎样的?
    • 使用了redis脚本执行的方式。因为存在根据查询结果,来决定执行什么变更动作。所以一定要保证动作串行执行。如果key不存,则新增key和param(线程id+redisClientid)记录,value为数值型,value=1。 如果,key + param存在,则表名key已被默认线程持有,并且这个线程就是当前线程。如果,key + param不存在,则表明key已被默认线程持有,并且这个线程不是当前线程。

2. redisson释放锁的逻辑如何实现

因为加锁时,会设置过期时间。所以就算不主动解锁。key过期了就相当于解锁了。

redisson的解锁过程如下图。先判断线程是否持有该锁。如果有,则value值减1。然后判断value是否大于0,如果大于0,则给key设置一个默认的过期时间30秒;如果等于0,则可以删除key和发布一个key删除事件。

3. redisson释放锁时,如何唤起其它线程取争抢锁

4. redisson如何解决A线程加锁,但是B线程去释放锁的问题

相关推荐
Coder_Boy_20 小时前
基于SpringAI的在线考试系统-相关技术栈(分布式场景下事件机制)
java·spring boot·分布式·ddd
程序员泠零澪回家种桔子1 天前
分布式事务核心解析与实战方案
分布式
凯子坚持 c1 天前
CANN 生态中的分布式训练利器:深入 `collective-ops` 项目实现高效多卡协同
分布式
惊讶的猫1 天前
rabbitmq实践小案例
分布式·rabbitmq
禁默1 天前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
惊讶的猫1 天前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人1 天前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子1 天前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽7981 天前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫1 天前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq