redisson-spring-boot-starter 是一个非常强大的开源库,它将 Redisson 与 Spring Boot 自动配置机制无缝集成,极大地简化了在 Spring 生态中使用 Redis 的高级功能。
下面我将为你提供一份 详细的说明文档,涵盖其作用、核心功能、使用方法、实际开发中的推荐做法,并结合 Spring Boot / Spring Cloud 项目场景进行实战讲解。
📚 redisson-spring-boot-starter 详细说明文档
适用版本:Spring Boot 2.x / 3.x,Java 8+(推荐 Java 17+)
一、什么是 redisson-spring-boot-starter?
redisson-spring-boot-starter 是 Redisson 官方提供的一个 Spring Boot Starter 模块,用于:
✅ 自动配置 Redisson 客户端
✅ 集成 Spring Cache 抽象
✅ 支持分布式对象、锁、队列、限流器等高级功能
✅ 简化配置和依赖管理
它基于 Redis 构建,但提供了比原生命令更高级的抽象,让你像使用本地 Java 对象一样操作分布式资源。
二、Redisson 是什么?与 Lettuce/Jedis 的区别
| 特性 | Lettuce / Jedis | Redisson |
|---|---|---|
| 定位 | Redis 原生命令客户端 | 分布式服务中间件(基于 Redis) |
| 功能 | 执行 SET/GET/LPUSH 等命令 | 提供分布式锁、集合、队列、地图、布隆过滤器等 |
| 编程模型 | 命令式操作 | 面向对象 API(如 RLock, RList, RMap) |
| 线程安全 | Lettuce 是,Jedis 否 | ✅ 全部线程安全 |
| 高级功能 | 无 | ⭐⭐⭐⭐⭐(分布式协调工具箱) |
🔥 一句话总结:
Lettuce/Jedis是“车轮”——基础驱动。Redisson是“整车”——开箱即用的分布式解决方案。
三、redisson-spring-boot-starter 的核心作用
| 作用 | 说明 |
|---|---|
| ✅ 自动装配 RedissonClient | 无需手动创建 RedissonClient 实例 |
| ✅ 支持多种 Redis 部署模式 | 单机、哨兵、集群、主从、云托管等自动识别 |
| ✅ 集成 Spring Cache | 可用 @Cacheable 注解 + Redisson 实现分布式缓存 |
| ✅ 提供分布式并发控制 | 分布式锁、信号量、闭锁等 |
| ✅ 分布式数据结构 | RMap、RList、RSet、RQueue、RDelayedQueue 等 |
| ✅ 分布式服务组件 | 分布式限流器(RateLimiter)、布隆过滤器、分布式调度任务 |
四、如何在 Spring Boot / Spring Cloud 项目中使用?
1. 添加依赖(Maven)
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.24.1</version> <!-- 推荐使用最新稳定版 -->
</dependency>
⚠️ 注意:
- 该 Starter 已包含
redisson和自动配置,不需要再引入spring-boot-starter-data-redis- 如果你同时使用 Lettuce 做普通缓存,也可以共存(但需注意连接冲突)
2. 配置 application.yml
✅ 单机模式
spring:
redis:
host: localhost
port: 6379
password: yourpassword
database: 0
timeout: 5s
# Redisson 特有配置
redisson:
config:
singleServerConfig:
address: redis://localhost:6379
password: ${spring.redis.password}
database: ${spring.redis.database}
connectionPoolSize: 16
connectionMinimumIdleSize: 4
threads: 16
nettyThreads: 32
✅ 哨兵模式
redisson:
config:
sentinelServersConfig:
masterName: mymaster
sentinelAddresses:
- redis://192.168.1.100:26379
- redis://192.168.1.101:26379
password: ${spring.redis.password}
database: 0
✅ 集群模式
redisson:
config:
clusterServersConfig:
nodeAddresses:
- redis://192.168.1.100:7000
- redis://192.168.1.100:7001
- redis://192.168.1.101:7000
password: ${spring.redis.password}
✅ 支持 Spring Property Placeholder(
${}),可读取spring.redis.*配置
3. 注入 RedissonClient 使用高级功能
@Service
public class OrderService {
@Autowired
private RedissonClient redissonClient;
public void createOrder(Order order) {
RLock lock = redissonClient.getLock("order:lock:" + order.getUserId());
try {
// 尝试加锁,最多等待 10 秒,锁自动释放时间 30 秒
if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
// 执行下单逻辑(扣库存、生成订单)
processOrder(order);
} else {
throw new RuntimeException("获取锁失败,操作过于频繁");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("线程中断");
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
}
五、常用功能实战示例
1. 分布式锁(RLock)——防止超卖
RLock lock = redissonClient.getLock("stock:lock:1001");
lock.lock(10, TimeUnit.SECONDS); // 自动续期(Watchdog)
try {
// 扣减库存
} finally {
lock.unlock();
}
✅ 支持:
- 可重入
- 锁自动续期(防止业务执行时间超过锁过期时间)
- RedLock 算法(多 Redis 节点容错)
2. 分布式限流器(RateLimiter)——接口限流
RRateLimiter rateLimiter = redissonClient.getRateLimiter("api:rate:order");
rateLimiter.trySetRate(RateType.OVERALL, 10, 1, RateIntervalUnit.SECONDS); // 1秒最多10次
if (rateLimiter.tryAcquire()) {
// 允许请求
} else {
throw new RuntimeException("请求过于频繁");
}
📌 适用于:登录限流、下单限流、短信发送限流
3. 延迟队列(RDelayedQueue)——订单超时关闭
RBlockingQueue<Order> queue = redissonClient.getBlockingQueue("order:queue");
RDelayedQueue<Order> delayedQueue = redissonClient.getDelayedQueue(queue);
// 添加一个 30 分钟后执行的任务
delayedQueue.offer(order, 30, TimeUnit.MINUTES);
// 消费者监听
new Thread(() -> {
while (true) {
try {
Order order = queue.take();
closeOrderIfNotPaid(order);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();
✅ 替代 Quartz + DB 轮询,更高效可靠
4. 布隆过滤器(RBloomFilter)——防止缓存穿透
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("user:bloom");
bloomFilter.tryInit(1000000, 0.03); // 初始化:预期元素100万,误判率3%
// 添加已存在的用户ID
bloomFilter.add("user:1001");
// 查询前先判断是否存在
if (bloomFilter.contains("user:999999")) {
// 可能存在,查缓存/DB
} else {
return null; // 绝对不存在
}
5. 分布式集合(RMap、RList)——共享状态
RMap<String, User> userMap = redissonClient.getMap("users");
userMap.put("1001", user);
RList<String> topUsers = redissonClient.getList("top:users");
topUsers.add("1001");
✅ 支持 Map 的本地缓存、读写同步、过期监听等
六、集成 Spring Cache(可选)
你也可以让 Redisson 作为 Spring Cache 的底层实现。
1. 配置 RedissonSpringCacheManager
@Bean
public CacheManager cacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<>();
config.put("users", new CacheConfig(60 * 1000, 120 * 1000)); // TTL 60s, 最大空闲时间 120s
return new RedissonSpringCacheManager(redissonClient, config);
}
2. 使用 @Cacheable
@Cacheable(value = "users", key = "#id")
public User getUser(Long id) {
return userRepository.findById(id);
}
⚠️ 注意:此方式不如 Lettuce + JSON 序列化灵活,建议仅用于简单场景。
七、实际开发中的推荐做法(Best Practices)
| 场景 | 推荐做法 |
|---|---|
| 🔐 分布式锁 | 使用 RLock.tryLock(timeout, leaseTime, unit),避免死锁 |
| 🚦 限流 | 使用 RRateLimiter + RateType.OVERALL,避免突发流量 |
| ⏳ 延迟任务 | 使用 RDelayedQueue 替代定时轮询 |
| 🔍 缓存穿透防护 | RBloomFilter + 空值缓存 |
| 🔄 数据一致性 | 先更新 DB,再删除 Redisson 缓存 |
| 🧩 多客户端共存 | 可同时使用 Lettuce(普通缓存) + Redisson(分布式功能) |
| 📊 监控 | 使用 RedissonClient.getNodesGroup().pingAll() 健康检查 |
| 💡 序列化 | 默认使用 JSON,可通过 Config.codec 自定义 |
八、注意事项与常见问题
| 问题 | 解决方案 |
|---|---|
❌ RedissonClient 无法自动注入 | 检查 redisson-spring-boot-starter 是否引入,配置是否正确 |
| ❌ 锁未释放导致阻塞 | 使用 try-finally 或 tryLock 带超时 |
| ❌ 延迟队列不触发 | 确保有消费者在监听底层 RBlockingQueue |
| ❌ 内存占用高 | 避免缓存大对象,设置合理 TTL |
| ❌ 与 Lettuce 冲突 | 建议分工:Lettuce 做缓存,Redisson 做分布式协调 |
九、总结:何时使用 redisson-spring-boot-starter?
| 使用场景 | 是否推荐 |
|---|---|
| 普通缓存(GET/SET) | ❌ 使用 spring-boot-starter-data-redis + Lettuce 更轻量 |
| 分布式锁 | ✅ 强烈推荐 |
| 分布式限流 | ✅ 推荐 |
| 延迟任务 | ✅ 推荐 |
| 布隆过滤器 | ✅ 推荐 |
| 分布式集合/地图 | ✅ 推荐 |
| 微服务间状态共享 | ✅ 推荐 |
✅ 结论:
当你的项目需要 分布式协调能力 时,redisson-spring-boot-starter是最佳选择。
它不是“替代 Redis 客户端”,而是“增强 Redis 能力”的分布式工具箱。
十、附录:完整 pom.xml 示例
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Redisson Starter -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.24.1</version>
</dependency>
<!-- JSON 支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
如果你需要,我可以为你提供:
- GitHub 示例项目(含分布式锁、延迟队列、布隆过滤器)
- Docker Compose 部署 Redis + Redisson 测试环境
- Redisson 集群高可用配置模板
- 面试题整理(Redisson 相关)
3万+

被折叠的 条评论
为什么被折叠?



