Redisson 简介
Redisson 是一个基于 Redis 的 Java 驻内存数据网格(In-Memory Data Grid) 和 分布式服务框架,由 俄罗斯开发者 Nikita Koksharov 开发并开源。它在原生 Redis 功能基础上,提供了 分布式锁、分布式集合、分布式对象、事件驱动模型 等高级功能,极大地简化了 Java 应用在分布式环境下的开发。Redisson 支持 Redis 单机、哨兵、集群 等多种部署模式,并兼容 Spring、Spring Boot、Jakarta EE 等主流框架,是构建 高并发、高可用分布式系统 的理想工具。
核心特性
- 分布式锁
- 可重入锁(RLock):支持锁续期(WatchDog 机制)
- 公平锁(Fair Lock):按请求顺序获取锁
- 联锁(MultiLock):同时锁定多个资源
- 分布式集合
- Map(RMap):支持本地缓存、数据分片、条目过期
- Set(RSet):分布式唯一集合
- List(RList):分布式双向链表
- Queue(RQueue):分布式队列(FIFO)
- 分布式对象与服务
- 原子长整型(RAtomicLong):分布式计数器
- 信号量(RSemaphore):控制并发访问数量
- 布隆过滤器(RBloomFilter):高效判断元素是否存在
- 事件驱动模型
- 发布/订阅(Topic):支持模式匹配(Pattern)
- 远程服务(Remote Service):跨 JVM 方法调用
- 高性能与容错
- 连接池管理:优化网络 I/O
- 自动重连:节点故障时自动恢复
- Spring 集成
- 支持 Spring Cache 注解(
@Cacheable
) - 提供 Spring Session 存储实现
- 支持 Spring Cache 注解(
核心概念
术语 | 说明 |
---|---|
RLock | 分布式可重入锁,支持自动续期 |
RMap | 分布式哈希表,支持本地缓存 |
RTopic | 发布/订阅通道,支持消息广播 |
RedissonClient | 核心客户端接口,创建各种分布式对象 |
Config | 配置类(如集群节点、连接池参数) |
典型应用场景
- 分布式锁
- 秒杀系统防止超卖(如
RLock.tryLock()
)
- 秒杀系统防止超卖(如
- 缓存管理
- 分布式二级缓存(如
RMapCache
支持条目 TTL)
- 分布式二级缓存(如
- 实时消息系统
- 订单状态变更通知(通过
RTopic
发布)
- 订单状态变更通知(通过
- 任务调度
- 分布式延迟队列(如
RDelayedQueue
)
- 分布式延迟队列(如
- 微服务协同
- 跨服务方法调用(
RRemoteService
)
- 跨服务方法调用(
快速入门示例
1. 添加 Maven 依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.24.3</version>
</dependency>
2. 初始化客户端
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379")
.setPassword("password");
RedissonClient redisson = Redisson.create(config);
3. 使用分布式锁
RLock lock = redisson.getLock("orderLock");
try {
if (lock.tryLock(10, 30, TimeUnit.SECONDS)) { // 等待10秒,锁30秒后自动释放
// 执行业务逻辑
}
} finally {
lock.unlock();
}
4. 分布式 Map 示例
RMap<String, Object> map = redisson.getMap("userMap");
map.put("1001", new User("Alice", 28));
User user = (User) map.get("1001");
5. Spring Boot 集成
# application.yml
spring:
redis:
redisson:
config: |
singleServerConfig:
address: "redis://localhost:6379"
password: null
性能优化建议
- 连接池配置
- 调整
connectionPoolSize
(默认 64)和idleConnectionTimeout
- 调整
- 锁优化
- 避免长时间持有锁(设置合理的
leaseTime
) - 使用
tryLock
替代lock
防止线程阻塞
- 避免长时间持有锁(设置合理的
- 本地缓存
- 对只读高频数据启用
RMapCache
本地缓存
- 对只读高频数据启用
- 序列化选择
- 使用
Kryo
或FST
替代默认 JDK 序列化
- 使用
- 监控指标
- 通过
Redisson.getNodesGroup().pingAll()
检测节点健康状态
- 通过
数据评估
关于Redisson特别声明
本站速览导航提供的Redisson都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由速览导航实际控制,在2025年4月1日 下午9:44收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,速览导航不承担任何责任。