redis + 注解自动缓存
1、redis配置
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
redis配置
spring:
redis:
port: 6379
host: 127.0.0.1
password: 123456
@Configuration
@EnableCaching
public class RedisCacheManagerConfig {
@Bean
public CacheManager RedisCacheManager(RedisConnectionFactory factory) {
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
serializer.setObjectMapper(mapper);
// 配置序列化解决乱码的问题
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
// 设置缓存过期时间 为解决缓存雪崩,所以将过期时间加随机值
.entryTtl(Duration.ofSeconds(60 * 60 + new Random().nextInt(60 * 10)))
// 设置key的序列化方式
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// 设置value的序列化方式
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
// .disableCachingNullValues(); //允许缓存null值
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
// 启用RedisCache以将缓存 put/evict 操作与正在进行的 Spring 管理的事务同步
.transactionAware()
.build();
return cacheManager;
}
}
2、注解使用
@Override @CachePut(cacheNames = "supervision",key = "#request.id") public Supervision editSupervision(SupervisionAddRequest request) { Supervision supervision = new Supervision(); supervision.setId(request.getId()); supervision.setEnterpriseId(request.getEnterpriseId()); supervision.setAnswer(request.getAnswer()); supervision.setDeleted(0); return supervision; } @Override @Cacheable(cacheNames = "supervision", key = "#id",condition = "#result!=null") public Supervision info(Integer id) { return getById(id); } @Override @CacheEvict(cacheNames = "supervision", key = "#id") public Boolean delete(Integer id) { Supervision supervision = new Supervision(); supervision.setId(id); supervision.setDeleted(1); return updateById(supervision); }
@CachePut:更新缓存,没有就新增
@Cacheable:先查缓存,缓存中没有就执行方法,将结果值存入缓存
@CacheEvict:删除缓存
cacheNames,key:在redis中的key。以上在redis中的key为:supervision::id。类型为string

浙公网安备 33010602011771号