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

Spring Boot 集成 Redis 缓存解决方案

Spring Boot 集成 Redis 缓存解决方案

概述

本教程演示如何在 Spring Boot 项目中将 EHCache 缓存组件替换为 Redis,实现分布式缓存功能。通过配置 Redis 连接信息和缓存策略,完成缓存服务的迁移与验证。

环境准备

  1. Redis 服务:确保本地已安装并启动 Redis 服务
    redis-server redis.windows.conf
    
  2. 开发工具:IntelliJ IDEA 或 Eclipse
  3. 依赖管理:Maven 项目需在 pom.xml 添加 Redis 依赖
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    

核心配置步骤

1. 依赖配置

<!-- Redis 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- EHCache 依赖(保留用于兼容性) -->
<dependency><groupId>org.ehcache</groupId><artifactId>ehcache</artifactId><version>3.9.0</version>
</dependency>

2. 配置文件修改

# Redis 连接配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword
spring.redis.timeout=5000ms# 缓存策略配置
spring.cache.type=redis
spring.cache.redis.key-prefix=SMS:CODE:
spring.cache.redis.time-to-live=10s
spring.cache.redis.use-key-prefix=true

3. 服务启动验证

# 启动 Redis 客户端
redis-cli

执行以下命令验证连接:

127.0.0.1:6379> CONFIG GET port
127.0.0.1:6379> CONFIG GET dir

高级配置详解

缓存键管理

  • 前缀配置spring.cache.redis.key-prefix 用于区分不同业务模块的缓存
  • 键冲突规避:建议使用业务标识符作为前缀(如 SMS:CODE:
  • 动态前缀:通过 UseKeyPerfix 配置项控制是否启用前缀

有效期设置

  • 时间单位:支持 s(秒)、m(分钟)、h(小时)、d(天)
  • 过期策略time-to-live 设置缓存存活时间
  • 动态更新:可通过 Redis 命令手动设置键的过期时间

服务验证流程

  1. 生成测试键
    String key = "SMS:CODE:1886666888";
    String value = "123456";
    redisTemplate.opsForValue().set(key, value);
    
  2. 验证缓存
    redis-cli
    127.0.0.1:6379> GET SMS:CODE:1886666888
    
  3. 观察过期
    redis-cli
    127.0.0.1:6379> TTL SMS:CODE:1886666888
    

常见问题排查

1. 连接失败

  • 检查配置:确认 hostport 与 Redis 实际配置一致
  • 防火墙设置:确保 6379 端口未被防火墙阻止
  • 服务状态:执行 redis-cli ping 验证服务状态

2. 缓存未生效

  • 配置优先级:确认 spring.cache.type 设置为 redis
  • 键冲突:检查键名是否包含特殊字符或空格
  • 序列化问题:确保对象实现 Serializable 接口

3. 性能瓶颈

  • 连接池配置
    spring.redis.pool.max-active=8
    spring.redis.pool.max-idle=8
    spring.redis.pool.min-idle=2
    spring.redis.pool.max-wait=1000ms
    
  • Pipeline 优化:使用 Redis Pipeline 提高批量操作效率

进阶实践建议

1. 分布式锁实现

RedisOperations redisTemplate;
String lockKey = "distributed:lock";
String requestId = UUID.randomUUID().toString();Boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, 30, TimeUnit.SECONDS);
if (locked != null && locked) {try {// 执行业务逻辑} finally {if (requestId.equals(redisTemplate.opsForValue().get(lockKey))) {redisTemplate.delete(lockKey);}}
}

2. 缓存穿透防护

public String getWithCache(String key) {String value = redisTemplate.opsForValue().get(key);if (value != null) {return value;}// 不存在时设置空值缓存redisTemplate.opsForValue().set(key, "", 5, TimeUnit.MINUTES);return null;
}

3. 热点数据预加载

@Scheduled(fixedRate = 60000)
public void preloadHotData() {List<String> hotKeys = getHotKeysFromDB();for (String key : hotKeys) {String value = fetchFromDatabase(key);redisTemplate.opsForValue().set(key, value, 1, TimeUnit.HOURS);}
}

总结

通过本教程,我们完成了从 EHCache 到 Redis 的缓存迁移,掌握了 Spring Boot 中 Redis 集成的核心配置和高级用法。实际开发中建议:

  1. 使用 Redis 的连接池优化性能
  2. 启用缓存键前缀避免命名冲突
  3. 根据业务需求设置合理的缓存策略
  4. 实现完善的缓存监控和告警机制

注意:本配置示例基于 Spring Boot 2.x 版本,不同版本可能存在配置差异,建议参考官方文档进行版本适配。

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

相关文章:

  • 微服务核心组件解析:注册中心与负载均衡(Eureka/Nacos/Ribbon)
  • GNS3环境下静态路由配置实例与分析(管理距离、度量值)
  • 充值网站建设建设银行 公户 该网站使用过期的
  • 【VMware】虚拟机软件安装报硬盘不够,扩容未生效解决办法
  • LSTM的一个计算例子
  • javaEE 网络原理(TCP UDP)
  • 惠阳住房和建设局网站自学做网站
  • 中国能源建设集团招聘网站网站建设哪家好知道万维科技
  • 智慧寄件新体验:快递小程序如何简化日常生活
  • 小程序原生导航栏返回键实现
  • 基于开源AI智能名片的S2B2C商城小程序中搜索联想功能的优化策略研究
  • 精读C++20设计模式——行为型设计模式:迭代器模式
  • 短剧小程序系统开发:构建便捷高效的影视观看平台
  • 瑜伽馆会员约课小程序页面功能梳理
  • 免费领源码-Spring boot的物流管理系统 |可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
  • 南京银城建设 网站中山做网站
  • 多主机Docker Swarm集群网络拓扑可视化监控方案的部署规范
  • 腾讯 AudioStory:统一架构下的长篇叙事音频生成新标杆
  • AI 原生应用:内容创作的 “智能工厂” 革命
  • 做淘宝的货源网站描述建设网站的步骤
  • 免费的 CI/CD 服务,了解一下 GitHub Actions ?
  • 基于 CI/CD 平台将应用程序自动部署到 Kubernetes 集群
  • QT示例 使用QTcpSocket和QTcpServer类实现TCP的自定义消息头、消息体通信示例
  • YDWE编辑器系列教程一:编辑器界面
  • 外贸网站怎么找客户名城建设有限公司网站
  • Linux 系统基础配置:主机名、IP、主机映射、防火墙
  • AI 重构实体经济:2025 传统产业的智能转型革命
  • 【金仓数据库产品体验官】KingbaseES-Oracle兼容性体验
  • 初探 ansible 部署 devops 持续集成持续交付
  • 【VBA】点击按钮,实现将Excel表A数据按格式填入表B