Spring Boot 集成 Redis 实战教程
前言
在高并发、大数据量的应用场景中,缓存是提升系统性能的关键技术。Redis 凭借其卓越的读写性能、丰富的数据结构和高可用性,成为开发者常用的缓存工具。本教程将严格依据Spring 官方文档与Redis 官方文档,详细介绍 Spring Boot 与 Redis 的集成步骤。
一、创建 Spring Boot 项目
Spring Initializr 是创建 Spring Boot 项目的官方推荐方式,通过它能快速生成包含 Redis 依赖的项目骨架:
-
访问Spring Initializr 官网;
-
在页面中填写项目基本信息,如
Group
(组织标识符)、Artifact
(项目名称); -
在
Dependencies
(依赖)搜索框中输入Redis
,选择Spring Data Redis
; -
点击
Generate
生成项目压缩包,解压后使用 IDE 打开。
也可通过 IDE(如 IntelliJ IDEA)的New Project
向导,选择Spring Initializr
,按上述步骤完成项目创建。
二、引入 Redis 依赖
根据 Spring Boot 官方文档,spring-boot-starter-data-redis
依赖整合了 Redis 操作所需的核心功能。在pom.xml
文件中,默认情况下创建项目时已包含该依赖,若缺失,可手动添加:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
该依赖默认使用Lettuce
作为 Redis 客户端,Lettuce
是基于 Netty 的响应式客户端,在多线程环境下表现出色。若需使用传统的Jedis
客户端,参考官方文档,可添加如下配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>
三、配置 Redis 连接信息
Spring Boot 官方文档提供了多种配置 Redis 连接的方式,最常用的是在配置文件中设置。在application.properties
或application.yml
文件中,配置示例如下:
application.properties;
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.timeout=3000
# 连接池配置(可选)
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
application.yml;
spring:redis:host: localhostport: 6379password:database: 0timeout: 3000lettuce:pool:max-idle: 8min-idle: 0max-active: 8max-wait: -1ms
配置说明:
-
spring.redis.host
:Redis 服务器主机地址; -
spring.redis.port
:Redis 服务器端口号; -
spring.redis.password
:Redis 访问密码; -
spring.redis.database
:使用的 Redis 数据库编号(0 - 15); -
spring.redis.timeout
:连接超时时间; -
连接池相关配置(以
Lettuce
为例):用于控制连接池的大小和行为,提升连接管理效率。
四、编写 Redis 操作代码
1. 创建 Redis 配置类
参考 Spring 官方文档,创建配置类以定制RedisTemplate
。以Lettuce
客户端为例:
@Configurationpublic class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 键使用String序列化template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());// 值使用JSON序列化template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}
上述代码配置了RedisTemplate
,通过合理设置序列化方式,方便对不同类型数据进行存储和读取。
2. 编写 Redis 操作 Service;
封装 Redis 常用操作,方便业务代码调用:
@Servicepublic class RedisService {private final RedisTemplate<String, Object> redisTemplate;public RedisService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}// 存储数据public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 存储数据并设置过期时间public void set(String key, Object value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}// 获取数据public Object get(String key) {return redisTemplate.opsForValue().get(key);}// 删除数据public void delete(String key) {redisTemplate.delete(key);}}
3. 测试 Redis 操作
使用 JUnit 5 编写测试类验证 Redis 操作:
@SpringBootTestpublic class RedisTest {@Autowiredprivate RedisService redisService;@Testpublic void testRedis() {// 存储数据redisService.set("testKey", "testValue");// 获取数据Object value = redisService.get("testKey");System.out.println("获取到的值:" + value);// 删除数据redisService.delete("testKey");Object deletedValue = redisService.get("testKey");System.out.println("删除后获取到的值:" + deletedValue);}
}
运行测试,若控制台输出预期结果,表明 Redis 集成成功。
五、使用 Redis 实现缓存
Spring 官方文档提供了强大的缓存抽象机制,结合 Redis 可轻松实现缓存功能。
1. 启用缓存
在 Spring Boot 主类上添加@EnableCaching
注解:
@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
2. 编写 Service 方法并添加缓存注解
以用户查询为例:
@Servicepublic class UserService {// 模拟从数据库查询用户public User getUserFromDatabase(String userId) {// 实际查询数据库逻辑return new User(userId, "John Doe");}// 使用@Cacheable缓存方法结果@Cacheable(value = "users", key = "#userId")public User getUser(String userId) {return getUserFromDatabase(userId);}
}
@Cacheable
注解会根据value
和key
定义的规则,自动管理缓存的读写,当方法再次被调用时,若缓存存在则直接返回缓存数据,提升系统响应速度。
总结
通过以上步骤,依据官方文档完成了 Spring Boot 与 Redis 的集成及缓存实现。实际开发中,还可探索 Redis 的发布订阅、哨兵模式、集群模式等高级功能,进一步挖掘 Redis 潜力。若在实践过程中有疑问,欢迎交流讨论。