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 @   shine-rainbow  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2023-03-10 JDK 1.8新特性 Stream流
点击右上角即可分享
微信分享提示