Spring Boot + Redis 分布式缓存实战:构建企业级缓存方案完整指南
随着业务量增长,数据库访问往往成为系统性能的主要瓶颈。引入分布式缓存机制能够有效降低数据库负载、缩短接口响应时间。本文以Spring Boot 2.7.x 和 Redis 6.x 为技术基础,系统讲解环境部署、缓存封装、策略设计及性能优化等关键环节,帮助开发者快速搭建生产级缓存体系。
一、开发环境与依赖配置
1.1 技术版本选型
本次实战采用经过生产验证的稳定版本组合:
- 运行环境:Java 11(长期支持版)
- 核心框架:Spring Boot 2.7.10
- 缓存服务:Redis 6.2.6
- 项目构建:Maven 3.8.6
- 开发工具:IntelliJ IDEA 2022.3
1.2 环境搭建流程
- Redis 服务启动开发环境推荐使用 Docker 快速启动 Redis 实例:
bash
# 获取Redis镜像
docker pull redis:6.2.6
# 运行容器(配置密码验证,端口映射)
docker run -d --name redis-server -p 6380:6379 redis:6.2.6 --requirepass "admin123"
- Spring Boot 项目创建通过 Spring Initializr 创建工程时添加以下模块:
- Spring Web(用于接口测试)
- Spring Data Redis(Redis 客户端集成)
- Lombok(减少样板代码)
二、代码实现:配置层与工具类封装
2.1 应用配置文件(application.yml)
在 src/main/resources 目录下创建 application.yml:
yaml
spring:
# Redis 连接配置
redis:
host: 127.0.0.1
port: 6380
password: admin123
timeout: 3000ms
lettuce:
pool:
max-active: 10
max-idle: 10
min-idle: 1
max-wait: 800ms
# 缓存框架配置
cache:
type: redis
redis:
time-to-live: 1800000ms
cache-null-values: false
use-key-prefix: true
# 业务层缓存前缀
cache:
key-prefix: "biz:cache:"
2.2 Redis 配置类(CacheConfiguration.java)
创建配置类定义 RedisTemplate 序列化策略,并注册缓存管理器:
java
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.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
@Configuration
@EnableCaching
public class CacheConfiguration {
@Bean
public RedisTemplate<String, Object> customRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
StringRedisSerializer keySerializer = new StringRedisSerializer();
GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
template.setKeySerializer(keySerializer);
template.setValueSerializer(valueSerializer);
template.setHashKeySerializer(keySerializer);
template.setHashValueSerializer(valueSerializer);
template.afterPropertiesSet();
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(30))
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.disableCachingNullValues();
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
}
