当前位置: 首页 > news >正文

【并发编程】Redisson 的分布式锁

目录

一、Redisson 的介绍

1.1 核心特点

1.2 特性

1.3 常用功能举例

1.4 为什么用Redisson

二、Redisson 中的分布式锁

2.1 Redisson 实现分布锁

① 添加 Redisson 框架支持

② 配置 RedissonClient 对象

③ 创建分布式锁

④可重入锁底层实现

 ⑤可重入锁的验证

2.2 Redission 常用配置

2.2.1 单机模式

2.2.2 集群模式

2.2.3 哨兵模式

2.3 公平锁的实现

2.4 读写锁的实现

2.5 信号量 Semaphore

2.5.1 单机部署案例演示

2.5.2 分布式环境案例演示

2.6 闭锁(CountDownLatch)

2.6.1 单机部署案例演示

2.6.2 分布式环境案例演示


一、Redisson 的介绍

Redisson 是一个开源的用于操作 Redis 的 Java 框架。与 Jedis 和 Lettuce 等轻量级的 Redis 框架不同,它提供了更高级且功能丰富的 Redis 客户端。它提供了许多简化 Redis 操作的高级 API,并支持分布式对象、分布式锁、分布式集合等特性。

Redisson 官网地址:Redisson | Valkey & Redis Java client. Ultimate Real-Time Data Platform

源码地址:GitHub - redisson/redisson: Redisson - Valkey and Redis Java client. Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..

1.1 核心特点

  1. ​简化操作​:Redisson把Redis的复杂命令封装成了Java中常见的对象(比如Map、List、锁等),你像用Java集合一样操作Redis。
  2. ​分布式支持​:它特别适合分布式系统,比如可以轻松实现多台服务器之间的共享数据、协同工作。
  3. ​功能丰富​:除了基础的数据存储,还提供了分布式锁、消息队列、定时任务等高级功能。

1.2 特性

  1. Redisson 可以设置分布式锁的过期时间,从而避免锁一直被占用而导致的死锁问题。

  2. Redisson 在为每个锁关联一个线程 ID 和重入次数(递增计数器)作为分布锁 value 的一部分存储在 Redis 中,这样就避免了锁误删和不可重入的问题。

  3. Redisson 还提供了自动续期的功能,通过定时任务(看门狗)定期延长锁的有效期,确保在业务未完成前,锁不会被其他线程获取。

1.3 常用功能举例

  • 分布式对象

    • 比如用RMap(类似Java的HashMap)存数据,多个服务器可以共享这个Map。
    • RList(类似Java的List)存一个列表,所有服务器都能看到同样的内容。
  • 分布式锁

    • 比如你的系统有多个服务实例,但同一时间只允许一个实例执行某个任务(比如抢购商品),Redisson的锁可以避免冲突。
  • 消息队列(发布/订阅)​

    • 服务A发一条消息到Redis,服务B能立刻收到并处理,适合解耦系统模块。
  • 限流器

    • 控制某个操作的频率,比如“1分钟内最多请求100次API”,防止系统过载。
  • 分布式计数器

    • 多个服务同时操作一个计数器(比如统计在线人数),Redisson保证数字准确。
  • BloomFilter(布隆过滤器)​

    • 快速判断某个数据是否可能存在(比如防止重复提交),节省内存。

1.4 为什么用Redisson

  • 省事​:不用自己拼接Redis命令,Java方法直接调用。
  • 可靠​:它处理了网络重连、超时等细节。
  • 高性能​:基于Netty(高性能网络框架),通信效率高。

二、Redisson 中的分布式锁

2.1 Redisson 实现分布锁

① 添加 Redisson 框架支持

如果是 Spring Boot 项目,直接添加 Redisson 为 Spring Boot 写的如下依赖:

<!-- Redisson -->
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.25.2</version> <!-- 请根据实际情况使用最新版本 -->
</dependency>

其他项目,访问 https://mvnrepository.com/search?q=Redisson 获取具体依赖配置。

② 配置 RedissonClient 对象

将 RedissonClient 重写,存放到 IoC 容器,并且配置连接的 Redis 服务器信息。

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.c

相关文章:

  • 设计模式系列(1):总览与引导
  • 使用PHP对接印度股票市场API
  • 沐言智语开源Muyan-TTS模型,词错率、语音质量评分都处于开源模型的一线水平,推理速度相当快~
  • 【ns3】安装(包括无网安装)
  • Lua再学习
  • GTS-400 系列运动控制器板卡介绍(二十)---PT 动态FIFO
  • GitHub 趋势日报 (2025年05月10日)
  • 线程池使用ThreadLocal注意事项
  • docker安装superset实践
  • 极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎
  • Linux511SSH连接 禁止root登录 服务任务解决方案 scp Vmware三种模式回顾
  • Kids A-Z安卓版:儿童英语启蒙的优质选择
  • 《异常链机制详解:如何优雅地传递Java中的错误信息?》
  • 嵌入式中屏幕的通信方式
  • LVGL(lv_label实战)
  • 2025御网杯wp(web,misc,crypto)
  • Python异常处理全解析:从基础到高级应用实战
  • 天授强化学习库了解
  • openai接口参数max_tokens改名max-completion-tokens?
  • Google LLM prompt engineering(谷歌提示词工程指南)
  • 马上评|让查重回归促进学术规范的本意
  • 科技部等七部门:优先支持取得关键核心技术突破的科技型企业上市融资
  • 外交部:中方对美芬太尼反制仍然有效
  • 李公明谈“全球南方”与美术馆
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?
  • 商务部就开展打击战略矿产走私出口专项行动应询答记者问