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
放到下一篇写



















