spring-boot-starter-data-redis 与 org.redisson 区别 联系

spring-boot-starter-data-redis 与 org.redisson 区别 联系? 是否需要共存?如何配置使用?

这是一个非常实用且常见的问题,尤其是在使用 ​​Spring Boot​ ​ 开发时,涉及到 ​​Redis 客户端/操作框架​​ 的选型与整合。我们来系统地分析:


🔍 一、先搞清楚两个东西是什么

1. ​​spring-boot-starter-data-redis​

  • ​是什么?​

    • 是 Spring Boot 提供的 ​官方 Redis Starter​ ,属于 ​Spring Data Redis​ 的一部分。
    • 它是对 ​Redis 操作的一个"高层封装"​ ,基于 ​Jedis 或 Lettuce​ (默认)这两个 Redis 客户端进行二次封装,提供了一套 ​模板类(如 RedisTemplate、StringRedisTemplate)和 Repository 支持​
  • ​提供了什么?​

    • 自动配置 Redis 连接(基于 application.yml / properties)
    • 提供了 ​RedisTemplate<K,V>​​StringRedisTemplate​ 两个核心类,用于操作 Redis
    • 支持 ​序列化/反序列化​
    • 支持 ​发布订阅、事务、Lettuce 线程安全连接池等​
    • 与 Spring 生态无缝集成(比如缓存注解 @Cacheable 底层可使用 Redis)
  • ​底层客户端:​

    • 默认使用 ​Lettuce​(推荐,基于 Netty,异步非阻塞,线程安全)
    • 也可以切换为 ​Jedis​
  • ​依赖示例:​

    复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

2. ​​org.redisson​

  • ​是什么?​

    • 是一个 ​第三方高性能 Redis Java 客户端 & 分布式和高级功能框架​,由 Redisson 提供。
    • ​不仅仅是一个 Redis 的 Java 驱动,而是一个"分布式和高级功能工具包"​ ,在原生 Redis 命令基础上,封装了大量 ​分布式和并发相关的功能​
  • ​提供了什么?​

    • 基于 Netty 的 ​异步、高性能 Redis 客户端​
    • 提供 ​分布式锁(RedissonLock)​
    • 提供 ​分布式集合(如 Map、Set、Queue、Deque、BloomFilter 等)​
    • 提供 ​分布式对象(如 RemoteService、LiveObjectService)​
    • 提供 ​布隆过滤器、限流器、延迟队列、MapReduce 等高级功能​
    • 支持 ​Redis 集群模式、哨兵模式、主从等​
    • 内部也是使用 Redis 命令,但是做了更高层次的封装,简化了分布式场景下的开发
  • ​依赖示例:​

    复制代码
    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson-spring-boot-starter</artifactId>
        <version>3.27.2</version> <!-- 请使用最新版本 -->
    </dependency>

🔄 二、两者的关系与区别对比

对比维度 ​spring-boot-starter-data-redis​ ​org.redisson (redisson-spring-boot-starter)​
​定位​ Spring 官方对 Redis 的数据访问抽象层,提供模板和基础操作 第三方高性能 Redis 客户端 + 分布式工具包
​主要用途​ 操作 Redis 键值数据,支持缓存、模板操作、与 Spring Cache 整合 提供 Redis 的高级功能:分布式锁、队列、集合、限流、布隆过滤器等
​是否官方​ ✅ 是 Spring 官方维护 ❌ 是第三方库(Redisson 项目)
​客户端实现​ 默认使用 Lettuce(也可选 Jedis) 自己基于 Netty 实现的高性能 Redis 客户端
​操作方式​ 提供 RedisTemplate、StringRedisTemplate,需要手动编写 key/value 操作 提供丰富的分布式对象 API,如 RLock、RMap、RQueue,开箱即用
​分布式能力​ ❌ 无内置分布式锁、队列等高级功能 ✅ 强大的分布式工具:分布式锁、队列、Map、限流器、布隆过滤器等
​缓存注解支持​ ✅ 支持 @Cacheable、@CachePut 等(与 Spring Cache 整合) ❌ 不直接支持,需自行实现或结合 Spring Cache
​序列化控制​ 可自定义 RedisTemplate 的序列化策略 内部有自己的一套序列化机制
​适用场景​ 一般 Redis 数据读写、缓存操作、与 Spring 生态集成 分布式系统中的高级功能需求:锁、队列、集合、实时通信等

❓三、两者是否需要共存?什么时候需要同时引入?

✅ ​​一般情况:不需要共存!​

  • 如果你只是做 ​​常规的 Redis 数据读写、缓存操作​​,比如:

    • 存取 JSON 数据
    • 使用 @Cacheable 注解做方法缓存
    • 手动通过 RedisTemplate 操作 key-value

    ➤ ​​只使用 spring-boot-starter-data-redis 就足够了!​


✅ ​​当你有以下"高级分布式功能"需求时,才考虑引入 Redisson:​

  • 你需要 ​分布式锁(RedissonLock)​
  • 你需要 ​分布式集合(如 RMap、RQueue、RSet、RList)​
  • 你需要 ​分布式延迟队列、消息队列​
  • 你需要 ​限流器、计数器、布隆过滤器​
  • 你需要 ​更高级的并发控制、异步/响应式 Redis 操作​

➤ ​​这时可以引入 Redisson,它和 Spring Data Redis 并不冲突,但通常也​ ​ ​​不需要同时使用它们的底层客户端(比如都去操作 Redis 的 key)​


⚠️ 注意事项:

  • ​两者可以共存,但不建议同时操作同一份 Redis 数据!​
    • 比如你用 RedisTemplate 存了一个 key,又用 Redisson 的 RMap 去操作类似结构,容易造成混乱。
  • ​两者底层都连的是同一个 Redis 服务,但封装方式不同。​
  • 如果引入了 Redisson,而且你只需要它的高级功能(如分布式锁),​可以不用 spring-boot-starter-data-redis​ ;但如果又要缓存又要高级功能,常见方案是 ​保留 Spring Data Redis 做缓存,Redisson 做分布式工具。​

🛠️ 四、如何配置与使用?


1. ​​使用 spring-boot-starter-data-redis(官方方案)​

依赖:

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置(application.yml):

复制代码
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: yourpassword # 可选
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

使用示例:

复制代码
@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 存数据
redisTemplate.opsForValue().set("key", "value");

// 取数据
Object value = redisTemplate.opsForValue().get("key");

或者使用 String 类型专用的:

复制代码
@Autowired
private StringRedisTemplate stringRedisTemplate;

如需使用 Spring Cache 注解:

复制代码
@Cacheable(value = "myCache", key = "#id")
public User getUserById(String id) {
    // ...
}

2. ​​使用 Redisson(第三方分布式方案)​

依赖:

复制代码
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.27.2</version> <!-- 请查看最新版本 -->
</dependency>

配置(application.yml):

复制代码
redisson:
  config: |
    singleServerConfig:
      address: "redis://127.0.0.1:6379"
      password: "yourpassword" # 可选
      database: 0
    threads: 16
    nettyThreads: 32

也可以将配置放在 redisson.yaml 文件中,放在 resources/ 目录下,Redisson 会自动加载。

使用示例:

注入 RedissonClient:

复制代码
@Autowired
private RedissonClient redissonClient;

获取分布式锁:

复制代码
RLock lock = redissonClient.getLock("myLock");
try {
    boolean isLocked = lock.tryLock(10, 60, TimeUnit.SECONDS);
    if (isLocked) {
        // 执行业务逻辑
    }
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
} finally {
    lock.unlock();
}

使用分布式 Map:

复制代码
RMap<String, String> map = redissonClient.getMap("myDistributedMap");
map.put("key", "value");
String val = map.get("key");

更多功能:RQueue(队列)、RSet、RBucket、RRateLimiter(限流)、布隆过滤器等,API 非常丰富 👍


✅ 总结推荐方案

场景 推荐工具 是否需要另一个
只做普通 Redis 数据读写、缓存(如 @Cacheable) ✅ spring-boot-starter-data-redis ❌ 不需要 Redisson
需要分布式锁、分布式集合、队列、限流等高级功能 ✅ Redisson ❌ 不一定需要 Spring Data Redis,但可共存
既要缓存又要高级功能 ✅ 两者共存:Spring Data Redis 做缓存,Redisson 做分布式功能 ✅ 可共存,但注意职责分离

🧠 小贴士

  • ​Spring Data Redis(RedisTemplate)​ 更灵活,适合"精细控制"的场景,但需要手动处理序列化、操作逻辑。
  • ​Redisson​ 更高级、更便捷,适合"分布式系统"中的常见模式,比如锁、队列、集合,开箱即用。
  • 如果你的项目 ​已经用了 Spring Cache + Redis​ ,然后想加 ​分布式锁​ ,那么 ​引入 Redisson 是非常常见且合理的选择​