【redis】redis红锁Redlock算法和底层源码分析
文章目录
- 【redis】redis红锁Redlock算法和底层源码分析
- 前言
- 一、当前代码为8.0版,接上一步
- 分布式锁的主要考点
- lock加锁关键逻辑
- unlock解锁关键逻辑
- 二、redis分布式锁-Redlock红锁
- 主页说明:
- 目前所写的分布式锁还有什么问题?
- Redlock算法设计理念
- 1、官网备注
- 2、设计理念
- 3、解决方案 2x+1台 x为可以容错台数
- 三、使用Redisson进行编码改进 V9.0和V9.1
- RedisConfig
- InventoryController
- BUG uuid+当前线程不正确
- 解决 V9.1版本
- 四、Redisson源码解析
- 分析步骤
- 1、守护线程“续命” redisson使用了“看门狗”定期检查
- 2、获取锁之后,给锁加一个“看门狗” 它会自动执行定时任务,在锁还没有被释放且快要过期的时候会续期
- 3、源码分析1-- 通过redisson新建的锁key,默认过期时间是30s
- 4、源码分析2-- 加锁过程
- 5、源码分析3-- 加锁逻辑
- 6、源码分析4-- “看门狗”程序
- “看门狗”自动延期机制
- 自动续期的lua脚本
- 7、解锁
- 五、多机案例 是因为单机状态下遇到单点故障是致命的
- 理论总结:
- 代码参考:
- 已弃用
- 新的多重锁
- 案例
- CacheConfiguration 容器配置
- controller
- 测试
- 结论
前言
一、当前代码为8.0版,接上一步

分布式锁的主要考点

lock加锁关键逻辑


unlock解锁关键逻辑

二、redis分布式锁-Redlock红锁

主页说明:

目前所写的分布式锁还有什么问题?
一台redis组成的分布式锁有一个致命的缺陷,一旦这台redis宕机,就无法操作分布式锁



Redlock算法设计理念
1、官网备注


2、设计理念


3、解决方案 2x+1台 x为可以容错台数

三、使用Redisson进行编码改进 V9.0和V9.1

RedisConfig

InventoryController

BUG uuid+当前线程不正确

解决 V9.1版本
只有正在锁定状态,且锁还是自己这个uuid+线程id才能解锁

四、Redisson源码解析

分析步骤

1、守护线程“续命” redisson使用了“看门狗”定期检查

2、获取锁之后,给锁加一个“看门狗” 它会自动执行定时任务,在锁还没有被释放且快要过期的时候会续期

3、源码分析1-- 通过redisson新建的锁key,默认过期时间是30s

4、源码分析2-- 加锁过程

5、源码分析3-- 加锁逻辑

流程分析

6、源码分析4-- “看门狗”程序

“看门狗”自动延期机制

自动续期的lua脚本

7、解锁

五、多机案例 是因为单机状态下遇到单点故障是致命的

理论总结:

代码参考:
已弃用


新的多重锁

案例

CacheConfiguration 容器配置


controller

测试
在其中一台宕机了,其他也还会继续工作,说明多重锁在高可用方面是优于单机分布式锁的
注:阳哥说平时单机性能就够用了
结论
底层是hash类型 后边是可重入次数 也是需要解锁的次数




















