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

【并发编程】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
http://www.xdnf.cn/news/5422.html

相关文章:

  • 基于大核感知与非膨胀卷积的SPPF改进—融合UniRepLK的YOLOv8目标检测创新架构
  • [Java实战]Spring Boot 整合 Thymeleaf (十)
  • c++的模板和泛型编程
  • C++:流插入、流提取操作符
  • Java volatile关键字深度解析与源码实现
  • 极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎
  • 解锁c++模板:从入门到精通
  • vue 中的数据代理
  • go-gin
  • 多模态大语言模型arxiv论文略读(六十九)
  • 【C语言指针超详解(四)】--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组,转移表
  • .NET MAUI 基础知识
  • 6.空气质量检测和语音播报
  • Nginx 源码安装成服务
  • Python与矢量网络分析仪3671E:自动化测试(Vscode)
  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 红黑树的线程安全的做法
  • 黑名单中的随机数-leetcode710
  • sunset:Solstice靶场
  • 动态规划之背包问题总结(Java)
  • 微服务架构-限流、熔断:Alibaba Sentinel入门
  • TIME - MoE 模型代码 4——Time-MoE-main/run_eval.py
  • 前端密码加密:保护用户数据的第一道防线
  • 《微服务设计》笔记
  • CSS:盒子阴影与渐变完全解析:从基础语法到创意应用
  • MySQL数据库容灾设计案例与SQL实现
  • 数据库的脱敏策略
  • 深入浅出之STL源码分析6_模版编译问题
  • 【Tools】git使用详解以及遇到问题汇总
  • 传感器:从单一感知到智能决策的跨越