分布式锁实现——Redis
分布式锁
分布式锁的视线方式
- Redis实现分布式锁
- Zookeeper实现分布式锁
- MySQL实现分布式锁
- Etcd实现分布式锁
实现分布式锁注意的点
- 互斥性
- 可重入性
- 锁超时,防死锁
- 锁释放正确,防误删
- 阻塞和非阻塞
- 公平和非公平
Redis 实现分布式锁的特点
- Redis是高性能的内存数据库,满足高并发的需求
- Redis支持原子性操作,保证操作的原子性和一致性
使用setnx实现
定义锁的抽象类
定义RedisLock
Service适配代码改造。
# init redis stock
set stock1 6000
存在的问题
-
互斥性(加锁后,限制保证共享资源正确性)
-
可重入性(未实现,加锁后再有一个加锁动作的话,会一直等待)
-
锁超时(未实现)
-
锁释放正确,防止误删(未实现,不确定持有锁的线程)
-
阻塞和非阻塞(阻塞)
-
公平和非公平(实现不了公平)
借助Redisson实现
<!-- 引入 redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.22.0</version>
</dependency>
改造StockService