1. Redisson 简介
Redisson 是一个基于 Redis 的 Java 客户端库,专注于分布式和并发编程。它提供了丰富的分布式对象和服务(如分布式锁、集合、队列、限流器等),简化了 Redis 在分布式系统中的使用。
2. 核心功能
2.1 分布式锁
-
可重入锁:支持线程重入和自动续期(看门狗机制)。
-
公平锁:按请求顺序获取锁。
-
联锁(MultiLock):同时锁定多个资源。
-
红锁(RedLock):多节点容错锁。
代码示例:
java
复制
Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); RedissonClient redisson = Redisson.create(config);// 获取锁对象 RLock lock = redisson.getLock("myLock"); try {// 尝试加锁,最多等待10秒,锁自动释放时间30秒boolean isLocked = lock.tryLock(10, 30, TimeUnit.SECONDS);if (isLocked) {// 执行业务逻辑} } finally {lock.unlock();redisson.shutdown(); }
2.2 分布式集合
-
Map:
RMap
支持本地缓存和分布式操作。 -
Set:
RSet
支持交并差集运算。 -
List/Queue:
RList
、RQueue
支持阻塞队列和延迟队列。
代码示例:
java
复制
RMap<String, String> map = redisson.getMap("myMap"); map.put("key1", "value1");RSet<String> set = redisson.getSet("mySet"); set.add("element1");
2.3 分布式限流器
-
基于令牌桶算法:控制单位时间内的请求速率。
代码示例:
java
复制
RRateLimiter rateLimiter = redisson.getRateLimiter("myLimiter"); // 初始化:每秒产生2个令牌 rateLimiter.trySetRate(RateType.OVERALL, 2, 1, RateIntervalUnit.SECONDS);// 获取1个令牌,等待不超过5秒 boolean acquired = rateLimiter.tryAcquire(1, 5, TimeUnit.SECONDS);
2.4 分布式信号量
-
Semaphore:控制并发访问资源数。
代码示例:
java
复制
RSemaphore semaphore = redisson.getSemaphore("mySemaphore"); semaphore.trySetPermits(5); // 设置许可证数量// 获取1个许可证 semaphore.acquire(); try {// 执行业务逻辑 } finally {semaphore.release(); }
3. 适用场景
-
分布式锁:秒杀、分布式任务调度。
-
分布式集合:共享缓存、跨服务数据共享。
-
限流与熔断:API 请求限流、服务保护。
-
发布订阅:跨节点消息通知。
4. 配置与优化
4.1 配置文件示例
java
复制
Config config = new Config(); config.useClusterServers().addNodeAddress("redis://node1:6379", "redis://node2:6379").setPassword("your_password").setConnectTimeout(5000).setIdleConnectionTimeout(30000).setRetryAttempts(3); RedissonClient redisson = Redisson.create(config);
4.2 性能优化
-
连接池配置:调整
connectionPoolSize
和idleConnectionTimeout
。 -
本地缓存:对高频读操作启用
RMapCache
本地缓存。 -
序列化优化:使用高效的序列化方式(如 Kryo 或 FST)。
5. 常见问题与解决方案
5.1 锁未正确释放
-
原因:业务代码异常未执行
unlock()
。 -
解决:使用
try-finally
确保释放锁,或设置合理的锁超时时间。
5.2 看门狗续期失败
-
现象:锁自动释放时间未续期。
-
解决:检查 Redisson 客户端与 Redis 的网络连接,或调整
lockWatchdogTimeout
。
5.3 Redis 节点故障
-
场景:使用 RedLock 时部分节点宕机。
-
解决:确保多数节点存活,并配置合理的重试策略。
6. 对比其他客户端
特性 | Redisson | Jedis/Lettuce |
---|---|---|
功能定位 | 分布式对象和高阶功能 | 基础 Redis 操作 |
锁实现 | 内置看门狗和 RedLock 支持 | 需手动实现 |
易用性 | 高度封装,API 简洁 | 需自行组合命令 |
性能 | 略低(功能复杂性) | 更高(轻量级) |
7. 总结
-
优势:简化分布式系统开发,内置丰富的分布式对象和并发工具。
-
推荐场景:需要复杂分布式功能(如锁、限流)的中大型系统。
-
学习资源:Redisson 官方文档。
通过合理使用 Redisson,可以显著降低分布式系统的开发复杂度,但需注意资源管理和异常处理。