Spring Boot 2.x 到 3.x 迁移实战:Redis 配置篇

news2025/4/2 22:50:28

前言

随着 Spring Boot 3.x 的发布,其对 Java 17 的支持和 模块化架构 的深化,Redis 配置与集成方式发生了显著变化。今天简单讲下redis的变化


一、Redis 配置前缀的模块化演进:从 spring.redisspring.data.redis

1.1 Spring Boot 2.x(Java 8)

  • 配置前缀spring.redis
  • 示例
    spring:
      redis:
        host: localhost
        port: 6379
        password: mypassword
        timeout: 2000
        lettuce:
          pool:
            max-active: 8
            max-idle: 8
    
  • 特点:直接通过 spring.redis 配置 Redis 连接参数,未明确与 Spring Data 模块绑定。

1.2 Spring Boot 3.x(Java 17)

  • 配置前缀spring.data.redis
  • 示例
    spring:
      data:
        redis:
          host: localhost
          port: 6379
          password: mypassword
          timeout: 2000ms
          client:
            type: lettuce
            lettuce:
              pool:
                max-active: 8
    
  • 模块化设计:遵循 Spring Data Commons 的统一命名规则,与 spring.data.mongodb 等其他数据源保持一致,便于扩展和维护。

二、Redis 客户端库的颠覆性变化:Lettuce 一统天下

2.1 Spring Boot 2.x:Jedis 和 Lettuce 并存

  • 支持客户端
    • Jedis:基于阻塞式 I/O,适合简单场景。
    • Lettuce:基于 Netty 的非阻塞式,支持异步操作和响应式流(Reactive Streams)。
  • 配置示例
    spring:
      redis:
        client-type: jedis  # 或 lettuce
        jedis:
          pool:
            max-active: 8
        lettuce:
          pool:
            max-active: 8
    

2.2 Spring Boot 3.x:Lettuce 独占

  • 官方声明
    • Jedis 客户端被弃用,仅支持 Lettuce。
    • 原因:Lettuce 的非阻塞特性更契合现代高并发场景,且与 Spring Reactor 生态深度集成。
  • 配置示例
    spring:
      data:
        redis:
          client-type: lettuce
          lettuce:
            pool:
              max-active: 8
              max-wait: 1000ms
    
  • 迁移建议
    <!-- 移除 Jedis 相关依赖 -->
    <!-- 保留 Lettuce 依赖 -->
    <dependency>
        <groupId>io.lettuce</groupId>
        <artifactId>lettuce-core</artifactId>
    </dependency>
    

三、RedisTemplate 的序列化策略升级:从 Java 序列化到 JSON

3.1 Spring Boot 2.x

  • 默认序列化器JdkSerializationRedisSerializer(基于 Java 序列化)。
  • 问题
    • 序列化后键值对难以直接读取(如 "\xac\xed\x00...")。
    • 跨语言兼容性差,且存在性能损耗。

3.2 Spring Boot 3.x

  • 默认序列化器GenericJackson2JsonRedisSerializer(基于 JSON)。
  • 优势
    • 键值对以 JSON 格式存储,可读性高。
    • 跨语言兼容性好,适合微服务场景。
  • 配置示例(若需恢复旧行为)
    @Configuration
    public class RedisConfig {
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new JdkSerializationRedisSerializer());
            template.setConnectionFactory(factory);
            return template;
        }
    }
    

四、集群与哨兵模式的配置迁移

4.1 Spring Boot 2.x

spring:
  redis:
    cluster:
      nodes: localhost:7000,localhost:7001
    sentinel:
      master: master1
      nodes: localhost:26379

4.2 Spring Boot 3.x

spring:
  data:
    redis:
      cluster:
        nodes: localhost:7000,localhost:7001
      sentinel:
        master: master1
        nodes: localhost:26379

五、连接池与超时参数的规范化

5.1 Spring Boot 2.x

spring:
  redis:
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: -1
      read-timeout: 1000

5.2 Spring Boot 3.x

spring:
  data:
    redis:
      lettuce:
        pool:
          max-active: 8
          max-idle: 8
          min-idle: 0
          max-wait: -1ms
        read-timeout: 1000ms
  • 关键变化
    • 超时参数需显式指定单位(如 ms)。
    • max-wait 改为 max-wait-time(部分版本可能不同,需参考文档)。

六、Redisson 集成的路径调整

6.1 Spring Boot 2.x

spring:
  redis:
    redisson:
      config: |
        singleServerConfig:
          address: redis://localhost:6379

6.2 Spring Boot 3.x

spring:
  data:
    redis:
      redisson:
        config: |
          singleServerConfig:
            address: redis://localhost:6379

七、安全性配置:SSL/TLS 的统一路径

7.1 Spring Boot 3.x

spring:
  data:
    redis:
      ssl: true
      ssl-trust-store: classpath:truststore.jks
      ssl-trust-store-password: mypassword
      ssl-trust-store-type: JKS

八、迁移策略与最佳实践

8.1 配置文件迁移步骤

  1. 替换前缀
    • spring.redis 改为 spring.data.redis
  2. 移除 Jedis 配置
    • 删除 jedis.pool 相关参数。
  3. 检查超时单位
    • timeoutread-timeout 等参数添加 ms 后缀。

8.2 依赖管理

<!-- Spring Boot 3.x 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.2.4.RELEASE</version> <!-- 保持最新版本 -->
</dependency>

8.3 测试与验证

@SpringBootTest
@AutoConfigureCache
public class RedisConfigTest {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Test
    public void testRedisConnection() {
        redisTemplate.opsForValue().set("testKey", "testValue");
        assertEquals("testValue", redisTemplate.opsForValue().get("testKey"));
    }
}

九、性能优化与高级配置

9.1 Lettuce 的异步与响应式支持

  • 异步操作
    @Autowired
    private ReactiveRedisTemplate<String, String> reactiveTemplate;
    
    public Mono<String> asyncGet(String key) {
        return reactiveTemplate.opsForValue().get(key);
    }
    
  • 响应式流集成
    @Autowired
    private Flux<String> reactiveKeys() {
        return reactiveTemplate.keys("pattern:*").flatMap(key -> reactiveTemplate.opsForValue().get(key));
    }
    

9.2 高级连接池配置

spring:
  data:
    redis:
      lettuce:
        pool:
          max-active: 100
          max-wait: 1000ms
          min-idle: 10
          max-idle: 50

十、总结:模块化设计的深层价值

Spring Boot 3.x 的配置调整并非简单的语法变化,而是 模块化设计 的体现:

  • 统一命名空间:通过 spring.data.redis 集中管理 Redis 配置,降低认知成本。
  • 技术演进:淘汰 Jedis,拥抱 Lettuce 的非阻塞特性,提升性能与可维护性。
  • 配置标准化:强制单位标注(如 timeout: 2000ms)减少配置歧义。

十一、附录:关键配置对比表

配置项Spring Boot 2.xSpring Boot 3.x
客户端类型spring.redis.client-typespring.data.redis.client-type
连接池配置spring.redis.poolspring.data.redis.lettuce.pool
JSON 序列化需手动配置默认启用
SSL 配置spring.redis.sslspring.data.redis.ssl
Redisson 集成路径spring.redis.redissonspring.data.redis.redisson

十二、进一步阅读

  • Spring Boot 3.x 迁移指南
  • Spring Data Redis 文档
  • Lettuce 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server:用户权限

目录 创建 & 删除1. 创建用户命令整理创建 admin2 用户创建 admin_super 用户 2. 删除用户命令删除 admin2 用户删除 admin_super 用户 3. 创建时权限的区别admin2 用户权限admin_super 用户权限 查看方法一&#xff1a;使用对象资源管理器&#xff08;图形化界面&#xff…

服务器数据恢复—误格式化NTFS文件系统分区别慌,NTFS数据复活秘籍

NTFS文件系统下格式化在理论上不会对数据造成太大影响&#xff0c;但有可能造成部分文件目录结构丢失的情况。下面介绍一个人为误操作导致服务器磁盘阵列中的NTFS文件系统分区被格式化后的服务器数据恢复案例。 服务器数据恢复过程&#xff1a; 1、将故障服务器连接到一台备份…

【3】数据结构的双向链表章

目录标题 双向链表的定义双向链表的初始化双向链表的创建插入操作删除操作 双向链表总代码与调试 双向链表的定义 结点结构组成&#xff1a;数据域&#xff08;data&#xff09;、指针域&#xff08;pre&#xff09;、指针域&#xff08;next&#xff09;。其中&#xff0c; da…

蓝桥杯杯赛-日期模拟

知识点 处理日期 1. 按天枚举日期&#xff1a;逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年&#xff1a;正确判断闰年条件。闰年定义为&#xff1a;年份 满足以下任意一个条件&#xff1a;(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…

搭建开源笔记平台:outline

折腾的意义 为什么要自己搭建一个笔记平台&#xff1f;没理由&#xff0c;就是突然想试试。有时候突然有个想法&#xff0c;搜了一下正好有合适的方案&#xff0c;就顺手试一下。 其实已经有很多成熟的笔记软件&#xff0c;例如Notion/OneNote&#xff0c;但谁不想要一个数据完…

Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能

Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具&#xff0c;帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API&#xff0c;或者叫做一个工具类&#xff0c;包含一系列静态…

电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法

调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中&#xff0c;合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一&#xff1a;使用快捷键 大多数笔…

presto行转列

presto的行列转换和spark、hive一样也是通过外链语句实现的&#xff0c;只不过语法和关键子有点不同&#xff0c;如下 with tmp1 as (select 1,2,3 as a1,4,5,6 as a2 ) select * from tmp1 cross join unnest(split(tmp1.a1, ,),split(tmp1.a2, ,) ) as b(a1s,a2s) 结果如下

51c自动驾驶~合集15

我自己的原文哦~ https://blog.51cto.com/whaosoft/11720657 #DRAMA 首个基于Mamba的端到端运动规划器&#xff08;新加坡国立&#xff09; 运动规划是一项具有挑战性的任务&#xff0c;在高度动态和复杂的环境中生成安全可行的轨迹&#xff0c;形成自动驾驶汽车的核心能…

拼多多 anti-token unidbg 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 版本7.3-7.4 都试过加密没什…

【Git】5 个分区的切换方式及示例

目录 1. **工作区&#xff08;Working Directory&#xff09;**2. **缓存区&#xff08;Stage/Index&#xff09;**3. **本地仓库&#xff08;Local Repository&#xff09;**4. **远程仓库&#xff08;Remote Repository&#xff09;**5. **贮藏区&#xff08;Stash&#xff0…

Java高频面试之并发编程-02

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;进程和线程的区别是什么&#xff1f; 1. 资源分配与独立性 进程&#xff1a; 独立性&#xff1a;每个进程拥有独立的内存…

openwebui和keycloak集成,使用keycloak的用户名和密码登录

1&#xff0c;实现效果 使用keycloak定义的用户名和密码&#xff0c;直接登录openwebui 2&#xff0c;实现原理 keycloak中用户信息中包含用户名和密码&#xff0c;以及email。 使用keycloak中的用户名和密码登录之后&#xff0c;会用email创建一个openwebui的账号。之后每次…

【区块链安全 | 第八篇】多签机制及恶意多签

部分参考&#xff1a;慢雾科技 文章目录 为什么需要多签多签机制Tron钱包下的恶意多签Tron 钱包多签权限分类Tron 多签机制的运作方式 恶意多签的过程黑客通过多签机制控制账户黑客剥夺用户权限&#xff0c;完全控制账户 恶意多签成因 在区块链中&#xff0c;多签&#xff08;M…

二月公开赛Web-ssrfme

目录 环境搭建 题目分析 分析代码 解题过程 Redis未授权访问 寻找Flag 环境搭建 进入含有docker-compose.yml的文件内&#xff0c;拉取容器镜像 docker-compose up -d 题目分析 访问容器地址172.25.254.200:8091查看题目 分析代码 url通过GET请求访问界面&#xff0c…

告别枯燥工作,走向自动化

嘿&#xff0c;小伙伴们&#xff01;今天给你们介绍两款超实用的RPA办公自动化软件&#xff0c;用它们&#xff0c;再也不用像机器一样做重复劳动啦&#xff0c;超省时间&#xff01; 工具名称&#xff1a;影刀RPA&#xff08;类似产品&#xff0c;八爪鱼 RPA&#xff0c;操作上…

可信数据空间:构筑安全可控数据流通

前言&#xff1a;可信数据空间是一种数据基础设施&#xff0c;发展可信数据空间是全国及各地数据基础设施建设的重要方面。国内数据空间的探索和实践仍然数据探索阶段。本期分享&#xff1a;可信数据空间构筑安全可控数据流通&#xff0c;包括可信数据空间技术介绍、如何助力数…

Zookeeper特性与节点数据类型

数据结构和监听机制 CP 文件系统形式存储 观察者模式监听节点数据变化、 临时节点客户端超时或发生异常节点就会删除 2888同步数据 3888选举端口 1.什么是Zookeeper ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来…

处理 Linux 信号:进程控制与异常管理的核心

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 在 Linux 操作系统中&#xff0c;信号是用于进程间通信的一种机制&#xff0c;能够向进程发送通知&#xff0c;指示某些事件的发生。信号通常由操作系统内核、硬件中断或其他进程发送。接收和处理信号是 Li…

【蓝桥杯每日一题】4.1

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x "今日秃头刷题&#xff0c;明日荣耀加冕&#xff01;" 今天我们来练习二分算法 不熟悉二分算法的朋友可以看&#xff1a;【C语言刷怪篇】二分法_编程解决算术问题-CSDN博客 …