实用指南:Spring Boot 整合 Redis 步骤详解
文章目录
- 1. 引言
- 2. 添加依赖
- 3. 配置 Redis 连接信息
- 4. 创建 Redis 操作服务类
- 5. 使用 RedisTemplate 或 ReactiveRedisTemplate
- 6. 测试 Redis 功能
- 7. 注意事项
- 8. 总结
Redis 是一个高性能的键值存储系统,常用于缓存、消息队列等多种场景。将 Redis 与 Spring Boot 结合使用可以极大提升应用的性能和响应速度。本文将详细介绍如何在 Spring Boot 应用中整合 Redis,并通过示例代码展示具体实现步骤。
1. 引言
随着互联网应用对快速读写数据的需求日益增长,传统的数据库已经难以满足某些特定场景下的性能要求。Redis 凭借其内存级的数据访问速度、丰富的数据结构支持以及简单易用的 API,成为了许多开发者的首选。接下来,我们将一步步介绍如何在 Spring Boot 中集成 Redis。
2. 添加依赖
首先,在 pom.xml 文件中添加 Spring Data Redis 和 Jedis(或 Lettuce)客户端的 Maven 依赖:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-data-redis
org.projectlombok
lombok
com.alibaba
fastjson
1.2.83
redis.clients
jedis
io.lettuce
lettuce-core
3. 配置 Redis 连接信息
接下来,在 application.properties 或 application.yml 文件中配置 Redis 的连接参数。这里以 .yml 文件为例:
server:
port: 8082
spring:
data:
redis:
host: localhost
port: 6379
password: 123456
4. 创建 Redis 操作服务类
Java实体
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description
* @Author HaleyHu
* @Date 2024/12/5 23:41
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String username;
private int age;
}
用户接口类
import org.hbin.redis.entity.User;
/**
* @Description
* @Author HaleyHu
* @Date 2024/12/5 23:44
*/
public interface UserService {
User query(Long id);
Boolean expired(Long id);
}
接口实现类
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import org.hbin.redis.entity.User;
import org.hbin.redis.service.UserService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
/**
* @Description
* @Author HaleyHu
* @Date 2024/12/5 23:46
*/
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final RedisTemplate redisTemplate;
private final String REDIS_PREFIX_KEY = "User::";
@Override
public User query(Long id) {
Object obj = redisTemplate.opsForValue().get("User::" + id);
if(obj != null) {
return JSON.parseObject(obj.toString(), User.class);
}
// 模拟从DB查询
User user = new User(id, "user" + id, 20);
redisTemplate.opsForValue().set(REDIS_PREFIX_KEY + id, JSON.toJSONString(user));
return user;
}
@Override
public Boolean expired(Long id) {
return redisTemplate.delete(REDIS_PREFIX_KEY + id);
}
}
Controller代码
import lombok.RequiredArgsConstructor;
import org.hbin.redis.entity.User;
import org.hbin.redis.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description
* @Author HaleyHu
* @Date 2024/12/5 23:46
*/
@RequiredArgsConstructor
@RestController
public class UserController {
private final UserService userService;
@GetMapping("/query")
public User query(@RequestParam Long id) {
return userService.query(id);
}
@GetMapping("/expired")
public String expired(@RequestParam Long id) {
return userService.expired(id).toString();
}
}
如果你想处理更复杂的数据类型(如对象),则需要使用 RedisTemplate 并配置序列化器。例如,使用 Jackson JSON 序列化器:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer
浙公网安备 33010602011771号