redis分布式锁(入门)
文章目录
- redis分布式锁(入门)
- 前言
- 一、面试题
- redis的用法:
- CAP
- 二、锁的种类
- 三、一个靠谱分布式锁需要具备的条件和刚需
- 四、`分布式锁`
- 五、重点
- 六、Base案例(boot+redis)
- 1.0、最基础的锁demo 单机锁
- 2.0、Nginx分布式微服务架构下的单机锁
- 为什么在高并发下,不能用lock unlock这样的JVM层面上的单机锁
- 如何解决?上redis分布式锁setnx
- 3.0、redis分布式锁
- 递归重试抢锁
- 问题 递归容易导致堆栈溢出,以及if判断
- 修改3.2 自旋代替递归、while代替if
- 3.2的问题 没有给分布式锁加过期时间,一旦由于宕机等原因无法执行删除锁,就会阻塞其他正常使用这把锁的业务
- 4.0版本
- 4.2改进版 合为一行保证原子性 但是过期时间不够怎么办?
- 5.0版 在finally的删除时,只能删除自己的
- 到5.0为止的加锁的状态
- lua脚本浅谈
- 6.0 加入lua脚本
- 到6.0为止的脑图
- 七、手写分布式锁思路分析2023
前言
一、面试题
redis的用法:
CAP
C 一致性,单体redis
AP 高可用 集群redis
二、锁的种类
三、一个靠谱分布式锁需要具备的条件和刚需
四、分布式锁
五、重点
六、Base案例(boot+redis)
1.0、最基础的锁demo 单机锁
2.0、Nginx分布式微服务架构下的单机锁
为什么在高并发下,不能用lock unlock这样的JVM层面上的单机锁
如何解决?上redis分布式锁setnx
3.0、redis分布式锁
递归重试抢锁
问题 递归容易导致堆栈溢出,以及if判断
修改3.2 自旋代替递归、while代替if
3.2的问题 没有给分布式锁加过期时间,一旦由于宕机等原因无法执行删除锁,就会阻塞其他正常使用这把锁的业务
4.0版本
4.2改进版 合为一行保证原子性 但是过期时间不够怎么办?
5.0版 在finally的删除时,只能删除自己的
到5.0为止的加锁的状态
问题:最后的判断+del不是一行原子命令操作,需要lua脚本进行修改
lua脚本浅谈
hello lua:
三条命令一起执行:
通过占位符方式,输入参数执行:
官网建议的lua脚本原子删除
实操:
语法:
案例:
6.0 加入lua脚本
到6.0为止的脑图
6.0只能也对小厂的分布式锁,而到了大数据量的高并发则需要7.0 8.0的技能,放到下一篇写
七、手写分布式锁思路分析2023
放到下一篇写