Fork me on Gitee

分布式锁实现——Redis

分布式锁

image-20240309185439940

分布式锁的视线方式

  • Redis实现分布式锁
  • Zookeeper实现分布式锁
  • MySQL实现分布式锁
  • Etcd实现分布式锁

实现分布式锁注意的点

  • 互斥性
  • 可重入性
  • 锁超时,防死锁
  • 锁释放正确,防误删
  • 阻塞和非阻塞
  • 公平和非公平

Redis 实现分布式锁的特点

  • Redis是高性能的内存数据库,满足高并发的需求
  • Redis支持原子性操作,保证操作的原子性和一致性

使用setnx实现

定义锁的抽象类

image-20240309232705100

定义RedisLock

image-20240309232737319

Service适配代码改造。

image-20240309232756081

# init redis stock
set stock1 6000

存在的问题

  • 互斥性(加锁后,限制保证共享资源正确性)

  • 可重入性(未实现,加锁后再有一个加锁动作的话,会一直等待)

  • 锁超时(未实现)

  • 锁释放正确,防止误删(未实现,不确定持有锁的线程)

  • 阻塞和非阻塞(阻塞)

  • 公平和非公平(实现不了公平)

借助Redisson实现

<!-- 引入 redisson-->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.22.0</version>
</dependency>

改造StockService

image-20240310203502768

posted @ 2024-03-10 20:58  shine-rainbow  阅读(35)  评论(0编辑  收藏  举报