springboot集成redis全过程
时间: 2025-07-19 13:27:05 浏览: 1
### ### 添加 Redis 依赖
在 Spring Boot 项目中集成 Redis,首先需要在 `pom.xml` 文件中添加以下 Maven 依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
该依赖提供了对 Redis 的基础支持,同时默认使用 Lettuce 作为客户端连接池[^1]。
### ### 配置 Redis 连接信息
在 `application.properties` 或 `application.yml` 中配置 Redis 的连接参数。基本的配置如下所示:
```properties
# Redis 基础配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=0
# Lettuce 连接池配置(可选)
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms
```
其中,`spring.redis.host` 和 `spring.redis.port` 分别指定 Redis 服务器的地址和端口,默认情况下为本地运行的 Redis 实例[^1]。
### ### 自定义 RedisTemplate 配置
Spring Boot 提供了 `RedisTemplate` 来操作 Redis 数据库。为了更好地处理字符串键值,通常需要自定义 `RedisTemplate` 的序列化方式:
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
```
上述配置将键和值的序列化器设置为 `StringRedisSerializer`,以避免出现乱码问题[^3]。
### ### 编写 Redis 操作服务类
通过注入 `RedisTemplate`,可以编写一个通用的 Redis 操作服务类来封装常用的缓存操作方法:
```java
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisService {
private final RedisTemplate<String, Object> redisTemplate;
public RedisService(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
// 写入缓存并设置过期时间
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);
}
}
```
此服务类提供基本的 `set`、`get` 和 `delete` 方法,可用于存储和读取任意类型的对象[^2]。
### ### 创建 REST 控制器接口
接下来创建一个控制器类,用于通过 HTTP 接口访问 Redis 服务:
```java
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/redis")
public class RedisController {
private final RedisService redisService;
public RedisController(RedisService redisService) {
this.redisService = redisService;
}
// 存储数据到 Redis
@PostMapping("/set")
public String setValue(@RequestParam String key, @RequestParam String value) {
redisService.set(key, value, 1, TimeUnit.HOURS);
return "Data stored successfully";
}
// 从 Redis 获取数据
@GetMapping("/get")
public Object getValue(@RequestParam String key) {
return redisService.get(key);
}
// 删除 Redis 中的数据
@DeleteMapping("/delete")
public String deleteValue(@RequestParam String key) {
redisService.delete(key);
return "Data deleted successfully";
}
}
```
该控制器定义了三个接口:`/set` 用于写入数据,`/get` 用于读取数据,`/delete` 用于删除数据。
### ### 单元测试 Redis 功能
为了验证 Redis 是否正常工作,可以编写一个单元测试类来测试写入和读取功能:
```java
import com.study.redis.entity.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RedisIntegrationTest {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
public void testSetAndGet() {
String key = "testKey";
String value = "testValue";
redisTemplate.opsForValue().set(key, value, 1, TimeUnit.HOURS);
Object result = redisTemplate.opsForValue().get(key);
assertEquals(value, result);
}
@Test
public void testSaveUserObject() {
UserInfo user = new UserInfo();
user.setUsername("每天进步一点点");
user.setPassword("redis");
user.setId(1);
redisTemplate.opsForValue().set("user", user);
UserInfo user1 = (UserInfo) redisTemplate.opsForValue().get("user");
assertEquals(user.getId(), user1.getId());
assertEquals(user.getUsername(), user1.getUsername());
assertEquals(user.getPassword(), user1.getPassword());
}
}
```
该测试类验证了基本的字符串和对象的存储与读取功能。
###
阅读全文
相关推荐


















