替换依赖,写 YAML,直接注入:multi-redis-spring-boot-starter 1.0.4 发布

发布时间:2026/7/12 11:01:52
替换依赖,写 YAML,直接注入:multi-redis-spring-boot-starter 1.0.4 发布 Spring Boot 3.5.x|Java 17|Standalone Cluster|Maven Central在微服务架构中一个应用连接多个 Redis 实例或集群几乎是常态——订单用 Redis A用户缓存用 Redis BSession 用 Redis Cluster。然而Spring Boot 官方的spring-boot-starter-data-redis只支持配置一个Redis 数据源想要接入多个 Redis要么手写一堆Bean配置要么自己封装 Starter。有没有一种方式只需替换依赖 写 YAML就能自动注册多个RedisTemplatemulti-redis-spring-boot-starter就是为此而生的。直接替换spring-boot-starter-data-redis的依赖不用改配置不用写代码多 Redis 能力即开即用。 替换前 vs 替换后先看效果。同样是连接 2 个 Redis订单 用户对比一下两种方式的工作量不用这个 Starter手动配置 12 个 BeanConfigurationpublicclassRedisConfig{BeanpublicLettuceConnectionFactoryorderRedisConnectionFactory(){/* ... */}BeanpublicRedisTemplateString,ObjectorderRedisTemplate(){/* ... */}BeanpublicStringRedisTemplateorderStringRedisTemplate(){/* ... */}BeanpublicLettuceConnectionFactoryuserRedisConnectionFactory(){/* ... */}BeanpublicRedisTemplateString,ObjectuserRedisTemplate(){/* ... */}BeanpublicStringRedisTemplateuserStringRedisTemplate(){/* ... */}// ... 再来两组就是 12 个 Bean}用这个 Starter0 行 Java 代码spring:data:redis:clusters:order:host:localhostport:6380user:host:localhostport:6381Bean 自动注册直接注入。从 2 个 Redis 扩展到 4 个只加 YAML不改一行代码。 为什么需要这个 Starter痛点一官方 Starter 只支持单个数据源Spring Boot 的RedisAutoConfiguration只创建一个RedisConnectionFactory和一个RedisTemplate。当需要同时连接多个 Redis 时订单用 Redis A用户用 Redis B必须手动配置多个LettuceConnectionFactory、多个RedisTemplate代码量急剧膨胀。痛点二多 Redis 配置重复且易错每新增一个 Redis 实例就要复制粘贴一套ConnectionFactoryRedisTemplateStringRedisTemplate的 Bean 定义。4 个 Redis 就是 12 个 Bean配置冗长且容易出错。痛点三迁移成本高已有的项目使用官方配置格式spring.data.redis.host/port切换到多 Redis 方案通常意味着要重写所有配置。如果有一种方案兼容官方配置格式零改动迁移呢 核心亮点✨ 1. 一行依赖即开即用dependencygroupIdorg.hongxi/groupIdartifactIdmulti-redis-spring-boot-starter/artifactIdversion1.0.4/version/dependency已发布到Maven Central无需额外配置仓库地址。这意味着任何 Spring Boot 项目加一行依赖就能获得多 Redis 能力。✨ 2. Auto-register 零代码模式——写 YAML直接注入这是最核心的能力。只需在 YAML 中声明 Redis 集群所有 Bean 自动注册不需要写一行 Java 代码spring:data:redis:clusters:order:# Standalone → orderRedisTemplatehost:localhostport:6380user:# Standalone → userRedisTemplatehost:localhostport:6381cache:# Redis Cluster → cacheRedisTemplatecluster:nodes:localhost:7001,localhost:7002,localhost:7003session:# Redis Cluster → sessionRedisTemplatecluster:nodes:localhost:7011,localhost:7012,localhost:7013自动生成的 BeanorderRedisTemplate、orderStringRedisTemplateuserRedisTemplate、userStringRedisTemplatecacheRedisTemplate、cacheStringRedisTemplatesessionRedisTemplate、sessionStringRedisTemplate直接按名称注入使用ServicepublicclassOrderService{privatefinalRedisTemplateString,ObjectorderRedisTemplate;privatefinalStringRedisTemplateuserStringRedisTemplate;publicOrderService(RedisTemplateString,ObjectorderRedisTemplate,StringRedisTemplateuserStringRedisTemplate){this.orderRedisTemplateorderRedisTemplate;this.userStringRedisTemplateuserStringRedisTemplate;}}不需要Configuration类不需要手动 Bean 定义。Standalone 和 Redis Cluster 混合部署也没问题——在同一个 YAML 里有的集群用host/port有的用cluster.nodesStarter 自动识别spring:data:redis:clusters:order:# Standalone 模式host:localhostport:6379cache:# Cluster 模式cluster:nodes:localhost:7001,localhost:7002,localhost:7003从 1 个 Redis 扩展到 4 个只需要加 YAML 配置不改一行代码。✨ 3. 自动检测零配置激活Auto-register 模式不需要手动开启。Starter 启动时自动扫描 Redis 配置场景配置激活模式多集群格式spring.data.redis.clusters.order.host...Auto-register官方 Standalonespring.data.redis.host127.0.0.1Auto-register官方 Clusterspring.data.redis.cluster.nodes...Auto-register显式开启spring.data.redis.auto-register: trueAuto-register显式关闭spring.data.redis.auto-register: falseBuilder 模式优先级显式auto-register设置 自动检测加完依赖写完 YAML什么都不用配自动生效。✨ 4. 官方配置格式兼容——零侵入迁移这是最实用的特性。把spring-boot-starter-data-redis替换成multi-redis-spring-boot-starter后现有配置不需要改任何内容。# 现有项目配置官方格式spring:data:redis:host:localhostport:6379password:yourpassword引入这个 Starter 后不需要改任何配置。上述配置会自动识别为名为default的集群Bean 命名为defaultRedisTemplate、defaultStringRedisTemplate。Standalone 和 Cluster 两种官方格式都支持# 官方 Standalonespring:data:redis:host:localhostport:6379# 官方 Cluster同样兼容spring:data:redis:cluster:nodes:localhost:7001,localhost:7002,localhost:7003当你需要新增 Redis 实例时只需追加多集群配置原有配置不动spring:data:redis:host:localhost# 现有配置不动 → defaultRedisTemplateport:6379clusters:user:# 新增第二个 Redis → userRedisTemplatehost:localhostport:6380单 Redis 迁移到多 Redis配置零改动渐进式扩展。✨ 5. YAML 序列化配置在 Auto-register 模式下可以直接在 YAML 中配置每个集群的序列化方式spring:data:redis:clusters:order:host:localhostport:6379serializer:key:string# string | json | java | byteArrayvalue:jsonhash-key:stringhash-value:json序列化类型对应实现适用场景javaJdkSerializationRedisSerializer官方默认兼容性最好jsonGenericJackson2JsonRedisSerializer可读性好跨语言stringStringRedisSerializer纯文本场景byteArrayByteArrayRedisSerializer二进制数据序列化配置也无需写代码YAML 里直接指定。✨ 6. 读写分离与连接池生产环境必备的读写分离和连接池能力同样通过 YAML 配置spring:data:redis:clusters:cache:cluster:nodes:localhost:7001,localhost:7002,localhost:7003read-from:REPLICA_PREFERRED# 优先从副本节点读取lettuce:pool:max-active:16max-idle:8min-idle:2cluster:refresh:adaptive:true# 自适应拓扑刷新生产环境的高可用读写分离一行配置搞定。️ 架构设计┌─────────────────────────────────────────────────────────┐ │ Spring Boot Application │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ multi-redis-spring-boot-starter │ │ │ │ │ │ │ │ ┌──────────────────────┐ ┌────────────────┐ │ │ │ │ │ MultiRedisAutoConfig │ │ ImportFilter │ │ │ │ │ │ (排除官方单实例配置) │ │ (条件装配) │ │ │ │ │ └──────────┬───────────┘ └────────────────┘ │ │ │ │ │ │ │ │ │ ┌──────────▼───────────────────────────────┐ │ │ │ │ │ MultiRedisRegistrar │ │ │ │ │ │ (ImportBeanDefinitionRegistrar) │ │ │ │ │ │ │ │ │ │ │ │ 自动检测 Redis 配置 │ │ │ │ │ │ 解析官方格式 / 多集群格式 │ │ │ │ │ │ 为每个 cluster 注册: │ │ │ │ │ │ - RedisConnectionFactory │ │ │ │ │ │ - RedisTemplate │ │ │ │ │ │ - StringRedisTemplate │ │ │ │ │ └──────────┬───────────────────────────────┘ │ │ │ └─────────────┼───────────────────────────────────┘ │ │ │ │ │ ┌─────────────▼───────────────────────────────────┐ │ │ │ Auto-register Beans (零代码自动注册) │ │ │ │ RedisTemplateBuilder (进阶编程控制) │ │ │ └─────────────┬───────────────────────────────────┘ │ └────────────────┼────────────────────────────────────────┘ │ ┌────────────┼────────────────┐ │ │ │ ┌───▼───┐ ┌────▼────┐ ┌───────▼──────┐ │Redis A│ │Redis B │ │Redis Cluster │ │:6379 │ │:6380 │ │:7001-:7003 │ └───────┘ └─────────┘ └──────────────┘核心设计理念零侵入不修改 Spring Boot 原有行为通过ImportBeanDefinitionRegistrar动态注册 Bean零配置自动检测 Redis 配置自动激活 Auto-register 模式无需手动开启渐进式采用官方配置格式完全兼容从单 Redis 到多 Redis 无需改配置双模式互补Auto-register 覆盖标准场景Builder 模式应对进阶需求 模块速查表模块说明multi-redis-spring-boot-autoconfigure核心自动配置模块包含自动检测、Bean 注册、官方格式兼容等全部逻辑multi-redis-spring-boot-starterStarter 依赖聚合模块引入即用multi-redis-spring-boot-sample示例项目演示多 Redis 场景的实际用法 学习价值对于初中级开发者✅ 理解 Spring Boot Starter 的实现原理✅ 学习ImportBeanDefinitionRegistrar动态注册 Bean 的机制✅ 掌握多 Redis 场景的零代码配置方式对于高级开发者✅ 深入理解AutoConfigurationImportFilter条件装配✅ 学习RedisTemplateBuilder的 Builder 模式设计✅ 掌握 Lettuce 连接池与集群读写分离配置对于架构师✅ 自定义 Starter 的设计模式参考✅ 官方配置兼容的零侵入迁移方案✅ 多 Redis 集群的统一治理思路 快速开始把spring-boot-starter-data-redis换成multi-redis-spring-boot-starter然后 3 步搞定1. 替换依赖!-- 替换掉官方 starter --dependencygroupIdorg.hongxi/groupIdartifactIdmulti-redis-spring-boot-starter/artifactIdversion1.0.4/version/dependency2. 写 YAML已有配置不用改自动兼容spring:data:redis:clusters:order:host:localhostport:6380user:host:localhostport:63813. 直接注入RestControllerpublicclassDemoController{privatefinalRedisTemplateString,ObjectorderRedisTemplate;privatefinalStringRedisTemplateuserStringRedisTemplate;publicDemoController(RedisTemplateString,ObjectorderRedisTemplate,StringRedisTemplateuserStringRedisTemplate){this.orderRedisTemplateorderRedisTemplate;this.userStringRedisTemplateuserStringRedisTemplate;}GetMapping(/demo)publicStringdemo(){orderRedisTemplate.opsForValue().set(order:001,hello);userStringRedisTemplate.opsForValue().set(user:001,world);returndone;}}完事。没有Configuration类没有手动 Bean 定义。 进阶Builder 模式当你需要编程控制如条件化创建、自定义 Pipeline可以注入RedisTemplateBuilder手动定义 Bean。YAML 配置的序列化器默认生效也可以在代码中覆盖ConfigurationpublicclassRedisConfig{BeanpublicRedisTemplateString,ObjectorderRedisTemplate(RedisTemplateBuilderbuilder){returnbuilder.cluster(order).keySerializer(RedisSerializer.string()).valueSerializer(RedisSerializer.json()).hashKeySerializer(RedisSerializer.string()).hashValueSerializer(RedisSerializer.json()).build();}BeanpublicStringRedisTemplateorderStringRedisTemplate(RedisTemplateBuilderbuilder){returnbuilder.stringTemplate(order);}}RedisTemplateBuilder可以注入到任何 Spring 管理的 Bean 中——不仅是Configuration类也可以是Service、Component。设置spring.data.redis.auto-registerfalse可强制使用 Builder 模式。 最佳实践总结1. 命名规范集群名称建议使用业务含义Bean 自动以{clusterName}为前缀集群名生成的 BeanorderorderRedisTemplate,orderStringRedisTemplatecachecacheRedisTemplate,cacheStringRedisTemplatedefaultdefaultRedisTemplate官方格式兼容2. 序列化策略新项目推荐key: stringvalue: json可读性好方便调试迁移项目保持value: java官方默认确保与现有数据兼容跨语言场景使用json序列化其他语言可直接读取3. 生产环境配置spring:data:redis:clusters:cache:cluster:nodes:${REDIS_CLUSTER_NODES}# 环境变量注入read-from:REPLICA_PREFERRED# 读写分离lettuce:pool:max-active:16min-idle:4cluster:refresh:adaptive:true# 自适应拓扑刷新 相关链接GitHub: javahongxi/multi-redis-spring-boot-starterMaven Central: org.hongxi:multi-redis-spring-boot-starterSpring Data Redis: Spring 官方文档Lettuce: Lettuce 官方文档Spring Boot: Spring Boot 官方文档 结语multi-redis-spring-boot-starter解决了一个很实际的问题在 Spring Boot 中优雅地管理多个 Redis 连接。替换依赖写 YAML直接注入完事。官方配置格式完全兼容从单 Redis 到多 Redis 零改动迁移。如果你正在 为项目中多个 Redis 连接配置而头疼 寻找一个零侵入的多 Redis Starter 方案️ 需要从单 Redis 平滑迁移到多 Redis 想学习自定义 Spring Boot Starter 的实现方式Star ⭐ multi-redis-spring-boot-starter让多 Redis 管理变得简单gitclone https://github.com/javahongxi/multi-redis-spring-boot-starter.git© hongxi.org| 打造实用的 Spring Boot 开源组件