SpringBoot整合Redis
说明:由于使用的是window系统,所以本文中使用的redis是再Docker中运行的。
至于如何启动redis这里不再说明,需要的请自行百度。
配置pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
编写redis配置类
/**
* redis配置类
*/
@Configuration
//开启缓存
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
/**
* 自定义生成key的规则
* @return
*/
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
//格式化缓存key字符串
StringBuilder sb = new StringBuilder();
//追加类名
sb.append(o.getClass().getName());
//追加方法名
sb.append(method.getName());
System.out.println("调用Redis缓存Key : " + sb.toString());
return sb.toString();
}
};
}
/**
* 采用RedisCacheManager作为缓存管理器
* @param connectionFactory
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);
return redisCacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
// 解决键、值序列化问题
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
- 上面的redisTemplate可以使用其他序列化的实现。
- key的生成规则可以由自己定义,返回值会成为redis的key。
编写redis操作工具类
redis工具类主要使用redisTemplate类进行操作,至于怎么操作这里不再阐述。你可以找网上大佬封装好的,也可以自己封装。
使用缓存
这里主要讲解一下 @Cacheable、@CachePut、@CacheEvict
- @Cacheable(在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。)
@Cacheable(key = "#id",value = "key",unless = "#id==null")
@PostMapping("/{id}/{value}")
public String setKey(@PathVariable String value,@PathVariable String id){
return value+id;
}
PS:若去掉value属性则会抛错。若没有key则会进入到配置类中的key生成策略中生成对应key。
最后进入redis中的key格式回事 key::value
- @CacheEvict(方法执行成功后会从缓存中移除相应数据)
@CacheEvict(value = "key",key = "#id")
@DeleteMapping("/{id}")
public String clear(@PathVariable String id){
return null;
}
- @CachePut(主要用于数据新增和修改方法)
@CachePut(value = "value", key = "#id")
@PutMapping("/{id}/{value}")
public User save(){
return null;
}
PS:参数, value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件
具体又哪些参数根据注解的参数来对照。
原文地址:https://www.cnblogs.com/bananafish/p/12347035.html
时间: 2024-10-07 13:50:59