在现代的软件开发中,缓存已经成为提高应用性能和用户体验的重要手段。Spring Boot作为Java领域流行的框架之一,与Redis的结合可以为开发者提供强大而灵活的缓存解决方案。本文将详细介绍如何将Spring Boot集成Redis来实现缓存功能。
1. 添加Redis依赖
首先,在Spring Boot项目的pom.xml
中添加Redis的依赖。
<dependencies>
<!-- Spring Boot Data Redis Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
2. 配置Redis连接
在application.properties
或application.yml
中配置Redis服务器的连接信息。
# application.properties
spring.redis.host=localhost
spring.redis.port=6379
或者:
# application.yml
spring:
redis:
host: localhost
port: 6379
3. 创建Redis配置类
创建一个Redis配置类,以配置RedisTemplate。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
//指定要序列化的域,field,get和set,以及修饰范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//指定序列化输入的类型,类必须是非final修饰的
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 值采用json序列化
template.setValueSerializer(jacksonSeial);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
// 设置hash key 和value序列化模式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jacksonSeial);
template.afterPropertiesSet();
return template;
}
}
4. 使用RedisTemplate
注入RedisTemplate并使用它来操作Redis。
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void setCache(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object getCache(String key) {
return redisTemplate.opsForValue().get(key);
}
}
5. 在组件中使用缓存
接下来,你可以在需要使用缓存的地方注入RedisService并调用相应的方法。
@RestController
public class CacheController {
@Autowired
private RedisService redisService;
@GetMapping("/setCache")
public String setCache(String key, String value) {
redisService.setCache(key, value);
return "Cache set for " + key;
}
@GetMapping("/getCache")
public String getCache(String key) {
String value = (String) redisService.getCache(key);
return "Cache value for