4、redisson-spring-boot-starter 的介绍和与 Spring Boot 集成使用

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

redisson-spring-boot-starter 是一个非常强大的开源库,它将 RedissonSpring 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-starterRedisson 官方提供的一个 Spring Boot Starter 模块,用于:

✅ 自动配置 Redisson 客户端
✅ 集成 Spring Cache 抽象
✅ 支持分布式对象、锁、队列、限流器等高级功能
✅ 简化配置和依赖管理

它基于 Redis 构建,但提供了比原生命令更高级的抽象,让你像使用本地 Java 对象一样操作分布式资源。


二、Redisson 是什么?与 Lettuce/Jedis 的区别

特性Lettuce / JedisRedisson
定位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-finallytryLock 带超时
❌ 延迟队列不触发确保有消费者在监听底层 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 相关)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值