文章目录
- 1 分布式锁
- 1.1 为什么需要分布式锁?
- 1.1.1 引入业务场景
- 1.1..2 本地锁与分布式锁
- 1.2 分布式锁核心思想
- 1.3 基于Redis实现分布式锁
- 1.3.1 基于Redis实现分布式锁问题
- 1.3.2 问题时间线分析
- 2 Redisson入门
- 2.1 Redisson快速实现
- 2.2 开门狗机制
- 2.3 加锁的实现原理
1 分布式锁
1.1 为什么需要分布式锁?
1.1.1 引入业务场景
业务场景:在物流系统中,快递员提交支付请求,由于网络等原因一直没有返回二维码,此时快递员在发起一次请求,这样就会生成2个订单,这就重复了不符合业务场景,因此我们就要在生成交易订单时加锁,若获取到锁就执行,否则就抛出异常。
1.1…2 本地锁与分布式锁
锁的定义:用于保障并发访问时数据的一致性、可见性和安全性。在多线程中为避免数据竞争常使用锁来限制对共享资源的访问。
本地锁:诸如synchronized、Lock锁等,只适用于单体项目锁定,在多个节点的分布式项目中不适用。
分布式锁:诸如Redisson、ZooKeeper等,适用于分布式多节点锁定。
1.2 分布式锁核心思想
实现分布式锁,可以借助Redis的setnx命令实现,使用该命令时,若key存在,则返回1,若key不存在,则返回0,也就意味着key只能设置一次,假设有多个线程同时设置值,只有一个能设置成功,这样就得到互斥效果,即达到锁的效果。
setnx命令演示: