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

redisson介绍

文章目录

      • 核心定位
      • 核心特性与功能
        • 1. 分布式锁与同步器(最常用)
        • 2. 分布式对象
        • 3. 分布式集合
        • 4. 分布式服务
        • 5. 高可用与性能优化
      • 快速使用示例
        • 1. 引入依赖(Maven)
        • 2. 初始化Redisson客户端
        • 3. 分布式锁(RLock)示例
        • 4. 分布式Map(RMap)示例
      • 适用场景
      • 与其他Redis客户端的区别

Redisson是一个基于Redis的 Java驻留内存数据网格(In-Memory Data Grid),同时也是Redis官方推荐的Java客户端之一。它不仅提供了对Redis基本命令的封装,更核心的是通过封装复杂的分布式逻辑,为Java开发者提供了一系列 分布式对象、分布式集合、分布式服务等高级功能,极大简化了分布式系统的开发。

核心定位

Redisson的核心价值在于:将Redis的分布式能力通过Java API的形式“本地化”,让开发者无需直接编写复杂的Redis命令或分布式逻辑(如分布式锁的超时续期、重入性处理等),就能便捷地使用分布式工具。

核心特性与功能

1. 分布式锁与同步器(最常用)

Redisson提供了多种分布式锁实现,解决分布式环境下的并发安全问题,且原生支持Redis的集群、哨兵模式,保证高可用。

  • 可重入锁(RLock):支持重入性(同一线程可多次获取锁),自动处理锁的超时续期(“看门狗”机制),避免业务未执行完锁提前释放。
  • 公平锁(FairLock):按线程请求顺序获取锁,避免“饥饿”问题。
  • 读写锁(RReadWriteLock):实现“读共享、写独占”,适合读多写少场景(如缓存更新)。
  • 信号量(RSemaphore):分布式限流工具,控制并发访问数量。
  • 闭锁(RLatch):类似Java的CountDownLatch,协调多个线程同步执行(如等待所有子任务完成后再执行主任务)。
2. 分布式对象

基于Redis实现的分布式对象,支持跨JVM实例共享数据。

  • 分布式基础对象:如RAtomicLong(分布式原子长整型)、RBitSet(分布式位集合)、RGeo(分布式地理空间对象,用于地理位置计算)等。
  • 分布式对象容器RBucket(分布式对象桶,可存储任意Java对象,自动序列化),例如用RBucket<String>存储分布式配置。
  • 过期与监听:所有分布式对象支持设置过期时间,以及监听对象的创建、更新、删除事件(通过addListener)。
3. 分布式集合

实现了Java集合框架的分布式版本,支持跨服务实例共享集合数据。

  • 基础集合RList(分布式List)、RSet(分布式Set)、RMap(分布式Map)等,API与Java原生集合一致,降低学习成本。
  • 高级集合
    • RMapCache:带过期时间的Map,支持键或值的过期策略(如缓存场景)。
    • RSetCache:带过期时间的Set。
    • RQueue/RDeque:分布式队列/双端队列,支持阻塞操作(如take()阻塞获取元素)。
    • RScoredSortedSet:分布式有序集合,可用于排行榜、优先级队列等场景。
4. 分布式服务

提供分布式环境下的协调服务,解决跨服务通信与协作问题。

  • 分布式消息队列RQueue可作为简单队列,RTopic支持发布/订阅模式(类似Redis的Pub/Sub,但提供更丰富的API,如消息确认、持久化等)。
  • 分布式远程服务(RRemoteService):允许一个服务实例调用另一个实例的方法,类似RPC,但基于Redis实现。
  • 分布式调度任务(RScheduledExecutorService):分布式定时任务,支持跨节点执行任务调度。
5. 高可用与性能优化
  • 连接模式:支持单机、哨兵、集群、主从等多种Redis部署模式,自动适配拓扑结构变化。
  • Netty驱动:基于Netty框架实现,支持异步(Async)、同步、反应式(Reactive)API,性能优于传统的BIO客户端(如Jedis)。
  • 连接池管理:内置连接池,优化Redis连接的创建与复用。
  • 自动重连:当Redis节点故障时,自动尝试重连,保证服务稳定性。
  • 数据分片:在Redis集群模式下,自动处理数据分片与迁移,对开发者透明。

快速使用示例

1. 引入依赖(Maven)
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.3</version> <!-- 最新版本可查看Redisson官网 -->
</dependency>
2. 初始化Redisson客户端

通过配置类初始化RedissonClient(核心入口类):

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;public class RedissonConfig {public static RedissonClient getRedissonClient() {// 创建配置Config config = new Config();// 单机模式(其他模式:集群、哨兵等需对应配置)config.useSingleServer().setAddress("redis://127.0.0.1:6379") // Redis地址.setPassword("123456") // 密码(无密码可不设).setDatabase(0); // 数据库编号// 初始化客户端return Redisson.create(config);}
}
3. 分布式锁(RLock)示例
public class RedissonLockDemo {public static void main(String[] args) {RedissonClient redisson = RedissonConfig.getRedissonClient();// 获取分布式可重入锁(锁名称为"order:lock:1001")RLock lock = redisson.getLock("order:lock:1001");try {// 加锁(默认30秒超时,看门狗自动续期)lock.lock();// 业务逻辑:如创建订单、扣减库存等System.out.println("执行分布式业务逻辑...");} finally {// 释放锁(必须在finally中执行,避免死锁)if (lock.isHeldByCurrentThread()) {lock.unlock();}}// 关闭客户端(实际项目中通常作为单例长期运行,无需频繁关闭)redisson.shutdown();}
}
4. 分布式Map(RMap)示例
public class RedissonMapDemo {public static void main(String[] args) {RedissonClient redisson = RedissonConfig.getRedissonClient();// 获取分布式MapRMap<String, String> map = redisson.getMap("user:info");// 操作Map(API与Java原生一致)map.put("name", "张三");map.put("age", "25");String name = map.get("name");System.out.println("获取name:" + name); // 输出:张三// 关闭客户端redisson.shutdown();}
}

适用场景

  • 分布式锁:解决微服务架构下的并发资源竞争(如库存扣减、订单创建)。
  • 分布式缓存:用RMapCache实现分布式缓存,替代本地缓存(如Caffeine)实现跨服务数据共享。
  • 分布式集合:存储需要跨服务共享的列表、集合数据(如用户在线列表、全局黑名单)。
  • 分布式协调:用信号量、闭锁实现多服务实例的协同工作(如分布式任务调度)。
  • 消息通信:用RTopic实现服务间的发布/订阅通信(如事件通知)。

与其他Redis客户端的区别

  • Jedis/Lettuce:主要提供Redis命令的基础封装,需开发者自己处理分布式逻辑(如锁的续期、重入性)。
  • Redisson:在基础命令封装之上,提供了更高层次的分布式工具类,屏蔽了底层复杂逻辑,更适合开发分布式系统。

Redisson通过对Redis的深度封装,让Java开发者能像使用本地对象一样使用分布式工具,大幅降低了分布式系统的开发难度,是微服务、分布式架构中的重要工具。

http://www.dtcms.com/a/523625.html

相关文章:

  • 20251020二分总结
  • Android 基于清单文件mate-data数据共享
  • Android中Window和LayoutParams的常用属性及常用方法介绍
  • MySQL的安装与卸载
  • 单调栈详解【C/C++】
  • 智慧用电平台让安全走在事故前面
  • 自己的商标名称可以做网站名称吗单页手机网站源码
  • 做网站设计的电脑需要什么配置公司网站首页图片素材
  • Kubernetes网络通信与Pod基础详解:从架构图看K8s核心组件
  • freeRTOS学习日记
  • 划分字母区间---超全详细解
  • 【机器学习】k近邻法
  • 如何使用vscode和express开发node.js
  • Metasploit网络嗅探实战:从数据包捕获到协议分析的完整指南
  • CICD实战(11) - 使用Arbess+GitLab实现PHP项目自动化部署
  • 南京需要做网站的公司施工企业汛期应急预案
  • HarmonyOS 超级终端与服务卡片开发:打造无缝多设备交互体验
  • TeamViewer 手机版:一键远程控制,深度管理,提升多设备管理效率
  • Day70 基于 Mailbox 机制的多线程传感器数据处理系统设计与实现
  • ORM 使用说明
  • 为什么要做手机网站百媚导航app入口app入口
  • 第八章-Tomcat调试与监控
  • 算法基础篇(8)贪心算法
  • 第二章-Tomcat核心架构拆解
  • 带你深度了解作用域和闭包
  • 【Mac下通过Brew安装Ollama 】部署 DeepSeek 轻量模型(实测版)
  • 微信网站用什么语言开发wordpress4.9.4 安装
  • 如何在百度提交自己的网站简要列举网站常见类型
  • 机器视觉HALCON:5.图像标定
  • 【跟小嘉学习JavaWeb开发】第三章 从数据类型说起