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

Redisson 与 Spring Boot 3.4 整合指南

概述

本文档总结了在 Spring Boot 3.4.0 项目中整合 Redisson 3.23.2 的完整流程、注意事项和常见坑点。

项目环境

  • Spring Boot: 3.4.0
  • Java: 21
  • Redisson: 3.23.2
  • Sa-Token: 1.37.0(使用 Redis 存储 Token)

整合方案

方案选择

经过实践,推荐使用手动配置方式,而非依赖 redisson-spring-boot-starter 的自动配置。

为什么选择手动配置?

  1. 自动配置的坑点

    • redisson-spring-boot-starter 的自动配置不支持 spring.redisson.config: | 内联 YAML 块标量
    • spring.redisson.file 属性在某些版本中可能无法正确读取配置文件
    • 默认配置会尝试连接 localhost:6379,导致连接失败
  2. 手动配置的优势

    • 配置透明,便于理解和调试
    • 可以精确控制 Redisson 客户端的创建时机
    • 避免与 Spring Boot 自动配置的冲突

整合步骤

1. Maven 依赖配置

<properties><redisson.version>3.23.2</redisson.version>
</properties><dependencies><!-- Redisson Spring Boot Starter --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>${redisson.version}</version></dependency><!-- Sa-Token Redis 支持(可选,如果使用 Sa-Token) --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-jackson</artifactId><version>${sa-token.version}</version></dependency>
</dependencies>

2. 创建 Redisson 配置文件

src/main/resources/ 目录下创建 redisson-dev.yml

singleServerConfig:# Redis 服务器地址(格式:redis://host:port)address: redis://45.56.67.87:6379# 密码password: your_password# 数据库索引database: 0# 连接超时时间(毫秒)- 10秒connectTimeout: 10000# 命令等待超时时间(毫秒)- 3秒timeout: 3000# 连接池大小connectionPoolSize: 64# 最小空闲连接数connectionMinimumIdleSize: 1# 订阅连接池大小subscriptionConnectionPoolSize: 1# 重试次数retryAttempts: 3# 重试间隔(毫秒)retryInterval: 1500# 空闲连接超时(毫秒)- 10分钟idleConnectionTimeout: 600000# DNS监控间隔(毫秒)- 5秒dnsMonitoringInterval: 5000# 线程池配置
threads: 4
nettyThreads: 4

注意事项

  • address 必须包含 redis:// 协议前缀
  • YAML 块标量中不需要额外的双引号
  • 密码直接写值,不需要引号

3. 创建 RedisConfig 配置类

package com.agent.mall.config;import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.spring.cache.RedissonSpringCacheManager;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;import java.io.IOException;/*** Redis配置类(使用 Redisson)** @author Claude Code* @date 2025-11-02*/
@Configuration
@EnableCaching
public class RedisConfig {/*** 手动配置 RedissonClient Bean* 从 classpath:redisson-dev.yml 读取配置** @return RedissonClient 实例* @throws IOException 如果配置文件读取失败*/@Bean(destroyMethod = "shutdown")public RedissonClient redissonClient() throws IOException {// 从 classpath 读取 Redisson 配置文件Config config = Config.fromYAML(new ClassPathResource("redisson-dev.yml").getInputStream());return Redisson.create(config);}/*** 配置缓存管理器(使用 Redisson)** @param redissonClient Redisson 客户端* @return CacheManager 实例*/@Beanpublic CacheManager cacheManager(RedissonClient redissonClient) {// 使用 Redisson 的 Spring Cache 管理器return new RedissonSpringCacheManager(redissonClient);}
}

关键点

  • @Bean(destroyMethod = "shutdown"):确保应用关闭时正确释放连接
  • 不使用 @ConditionalOnMissingBean:确保我们的配置优先生效
  • Config.fromYAML():直接从文件加载配置

4. 不需要在 application-dev.yml 中配置

由于使用手动配置方式,不需要application-dev.yml 中添加 Redisson 相关配置。

如果之前添加了以下配置,请删除:

# ❌ 删除这段配置
spring:redisson:file: classpath:redisson-dev.yml

或者

# ❌ 删除这段配置
spring:redisson:config: |singleServerConfig:address: redis://...

使用示例

基础使用

@Autowired
private RedissonClient redissonClient;public void example() {// 使用 RBucket 存储简单键值对RBucket<String> bucket = redissonClient.getBucket("key");bucket.set("value", 10, TimeUnit.MINUTES);String value = bucket.get();bucket.delete();
}

替代 RedisTemplate

如果之前使用 RedisTemplate,可以改用 Redisson API:

RedisTemplate 方式

@Autowired
private RedisTemplate<String, String> redisTemplate;redisTemplate.opsForValue().set("key", "value", 10, TimeUnit.MINUTES);
String value = redisTemplate.opsForValue().get("key");
redisTemplate.delete("key");

Redisson 方式

@Autowired
private RedissonClient redissonClient;RBucket<String> bucket = redissonClient.getBucket("key");
bucket.set("value", 10, TimeUnit.MINUTES);
String value = bucket.get();
bucket.delete();

高级特性

Redisson 提供了许多高级特性:

// 分布式锁
RLock lock = redissonClient.getLock("myLock");
lock.lock();
try {// 业务逻辑
} finally {lock.unlock();
}// 分布式限流器
RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");
rateLimiter.trySetRate(RateType.OVERALL, 10, 1, RateIntervalUnit.SECONDS);
if (rateLimiter.tryAcquire()) {// 允许访问
}// 布隆过滤器
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("myFilter");
bloomFilter.tryInit(10000, 0.01);
bloomFilter.add("element");
boolean exists = bloomFilter.contains("element");

常见坑点和解决方案

1. 连接 localhost 而非配置的地址

症状

Unable to connect to Redis server: localhost/127.0.0.1:6379

原因

  • Redisson Starter 的自动配置未读取到配置文件
  • 使用了内联 YAML 配置但 Starter 不支持

解决方案

  • 使用手动配置方式(如本文档所述)
  • 不在 application.yml 中配置 Redisson,完全通过 RedisConfig.java 配置

2. YAML 配置中的引号问题

错误示例

address: "redis://47.56.78.87:6379"  # ❌ 多余的引号
password: "dfgg2h3b4bv57d3b"          # ❌ 多余的引号

正确示例

address: redis://47.56.78.87:6379    # ✅ 不需要引号
password: dfgg2h3b4bv57d3b             # ✅ 不需要引号

说明:在 YAML 文件中,除非有特殊字符,否则不需要引号。redis:// 协议前缀是必须的。

3. 与 Spring Data Redis 冲突

症状

  • 同时存在 RedisTemplateRedissonClient 的配置
  • 启动时出现 Bean 冲突错误

解决方案

  • 移除 spring-boot-starter-data-redis 依赖
  • 删除 application.yml 中的 spring.data.redis 配置
  • 统一使用 Redisson

4. Sa-Token 整合问题

配置要点

  • Sa-Token 可以同时使用 Redisson
  • 依赖 sa-token-redis-jackson 即可
  • 不需要额外配置,Sa-Token 会自动使用 Spring 容器中的 RedissonClient

5. 配置文件未找到

症状

FileNotFoundException: class path resource [redisson-dev.yml] cannot be opened

解决方案

  • 确保配置文件在 src/main/resources/ 目录下
  • 检查文件名是否正确(注意大小写)
  • 确保配置文件被打包到 jar 中

6. 编码问题

注意

  • 配置文件统一使用 UTF-8 编码
  • 避免使用 GBK/ANSI 编码

连接池参数优化建议

根据不同场景调整连接池参数:

低并发场景(推荐配置)

connectionPoolSize: 16              # 连接池大小
connectionMinimumIdleSize: 1        # 最小空闲连接
subscriptionConnectionPoolSize: 1   # 订阅连接

中等并发场景

connectionPoolSize: 64
connectionMinimumIdleSize: 10
subscriptionConnectionPoolSize: 5

高并发场景

connectionPoolSize: 128
connectionMinimumIdleSize: 32
subscriptionConnectionPoolSize: 10

完整配置示例

项目结构

src/main/
├── java/
│   └── com/agent/mall/
│       ├── config/
│       │   └── RedisConfig.java          # Redisson 配置类
│       └── controller/
│           └── WxOpenController.java     # 使用 Redisson 的示例
└── resources/├── application.yml                    # 主配置├── application-dev.yml                # 开发环境配置(无需 Redisson 配置)└── redisson-dev.yml                   # Redisson 配置文件

总结

使用 Redisson 与 Spring Boot 3.4 整合时,关键点:

  1. 手动配置优于自动配置:避免 Starter 自动配置的坑
  2. 独立配置文件:将 Redisson 配置放在独立的 YAML 文件中
  3. 不要双引号:YAML 配置中不需要额外的引号
  4. 协议前缀必须:地址必须包含 redis:// 前缀
  5. 避免混用:不要同时使用 RedisTemplate 和 Redisson,统一使用 Redisson

遵循本文档的配置方式,可以避免大部分常见问题,实现稳定可靠的 Redis 连接。

http://www.dtcms.com/a/561069.html

相关文章:

  • 建设房地产公司网站的费用程序员网站开发框架
  • wordpress 新闻类网站什么网站可以免费做护师题
  • C++笔记-14-结构体
  • .NET周刊【10月第3期 2025-10-19】
  • 视频时间基 (time_base) 详解:时间的“刻度单位”
  • 网站开发最佳实践wordpress连接公众号
  • 数据库-基础命令
  • 蚌埠做企业网站wordpress外网访问不了
  • Linux网络接口配置:静态IP与动态IP设置(附代码示例)
  • 做同城特价的网站qwins是哪个网站做的
  • 基础算法精讲 03 | 滑动窗口|ASCII表如如何使用|substr函数
  • 中国建设银行官网首页 网站首页网站文件目录结构
  • GitHub Actions for AI:构建企业级模型CI/CD流水线
  • DevOps——CI/CD持续集成与持续交付/部署的理解与部署
  • 建立网站的公司平台七牛云存储 wordpress连接失败
  • 利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
  • 深圳网站设计网站制作深圳网站建设推进
  • 电力电子技术 第十三章——PWM逆变器
  • 网站建设方案应该怎么写wordpress用户评论图片
  • xtuoj 2021
  • 数据科学每日总结--Day8--数据挖掘
  • 达梦DEM监控工具部署
  • 机器学习实践项目(二)- 房价预测 - 认识数据
  • 李宁运动服网站建设规划书网站内链少改怎么做
  • 安装JDK安装GIT安装IDEA
  • 定制报表系统设计与实现
  • 最具价值的网站建设商业策划公司十大公司
  • 网站开发设计公东莞智通人才招聘网官网
  • 【BFS 解决FloodFill 算法】3. 岛屿的最⼤⾯积(medium)
  • 【JUnit实战3_23】 第十四章:JUnit 5 扩展模型(Extension API)实战(上)