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
标签:缓存,redis,supervision,key,new,注解,id From: https://www.cnblogs.com/junnnnnnnn/p/16932153.html