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
 

 
 
posted @ 2022-11-28 14:39  小小小小青石  阅读(371)  评论(0)    收藏  举报