当前位置: 首页 > news >正文

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.1port: 6379password: yourpassword # 可选lettuce:pool:max-active: 8max-idle: 8min-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: 0threads: 16nettyThreads: 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 是非常常见且合理的选择​​。
http://www.xdnf.cn/news/1273645.html

相关文章:

  • vue如何监听localstorage
  • 嵌入式开发学习(第三阶段第四天 Linux系统开发)
  • 复现论文《基于深度强化学习的微能源网能量管理与优化策略研究》
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • 【每天一个知识点】深度领域对抗神经网络
  • WPFC#超市管理系统(5)商品布局、顾客登录、商品下单
  • 【C++详解】红黑树规则讲解与模拟实现(内附红黑树插入操作思维导图)
  • ES 调优帖:Gateway 批量写入性能优化实践
  • C语言基础05——指针
  • 计算机视觉全景指南:从OpenCV预处理到YOLOv8实战,解锁多模态AI时代(第五章)
  • MVC结构变种——第三章核心视图及控制器的整体逻辑
  • 机器学习——TF-IDF 衡量词语在文档中重要程度
  • Java 日常开发笔记(小程序页面交互传参-id)
  • ​LabVIEW键盘鼠标监控
  • 分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码
  • 【Python练习】086. 编写一个函数,实现简单的DHCP服务器功能
  • 刑法视野下的虚拟财产属性争议:法律风险与市场潜力解析
  • Delphi 中的字符串类型 string 详解
  • 【0基础PS】PS工具详解--缩放工具
  • Beelzebub靶机攻略
  • 【Linux | 网络】数据链路层
  • PHP版本控制系统:高效文档管理
  • 从MySQL到大数据平台:基于Spark的离线分析实战指南
  • 5Python异常处理与模块导入全指南
  • 元数据管理与数据治理平台:Apache Atlas 分类传播 Classification Propagation
  • vue中使用h5plus
  • 【Elasticsearch入门到落地】16、RestClient查询文档-快速入门
  • Java Stream流详解:从基础语法到实战应用
  • spring-ai整合PGVector实现RAG
  • 【代码随想录day 15】 力扣 257. 二叉树的所有路径