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线程去释放锁的问题

相关推荐
明达智控技术10 小时前
告别停机内卷!热插拔远程IO,解锁工控运维新范式
分布式·物联网·自动化
漂着的圆木11 小时前
MCP 2026-07-28 长任务改造:别再用 HTTP 超时判断任务失败
分布式·架构·状态模式·ai agent
数智启示录16 小时前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录16 小时前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
数智启示录17 小时前
Apache Kafka 不只是消息队列:日志与 Offset 分离如何让事件可重放 【Kafka合集】
经验分享·分布式·面试·kafka·apache
数智启示录17 小时前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
BYSJMG17 小时前
大数据毕业设计选题推荐:基于大数据的全球气温历史演变分析与可视化,用Hadoop+Spark处理
大数据·hadoop·分布式·信息可视化·spark·kmeans·课程设计
爱吃苹果的梨叔17 小时前
AI 算力监控中心怎么建?分布式坐席 + 大屏联动 + 过程回放
人工智能·分布式·python
無a伟17 小时前
RabbitMQ :与AMQP的关系、核心组件、交换机类型
分布式·rabbitmq
jyOverQ1 天前
RabbitMQ 消息积压怎么办?Prefetch、消费者并发与扩容
分布式·后端·rabbitmq