Springboot @Cacheable配置自定义过期时间

@Bean
public RedisCacheManager classifyTreeList1d(RedisConnectionFactory connectionFactory) { //可配置多个

    RedisCacheConfiguration config = instanceConfig(3600 * 24 * 1L); //设置过期时间为1天
    return RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(config)
            .transactionAware()
            .build();
}

private RedisCacheConfiguration instanceConfig(Long ttl) {

    Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.registerModule(new JavaTimeModule());
    // 去掉各种@JsonSerialize注解的解析
    objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);
    // 只针对非空的值进行序列化
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    // 将类型序列化到属性json字符串中
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

    jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    return RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofSeconds(ttl))
            .disableCachingNullValues()
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));

}

使用

@CachePut(value = {"classifyTreeList"}, key = "#classify.getClassifyId()", cacheManager = "classifyTreeList1d")
@Cacheable(value = {"classifyTreeList"}, key = "#queryReq.getParameter()", cacheManager = "classifyTreeList1d")

删除单个key

不删除value下所有数据,而删除value里面某一条数据,通过key字段进行删除

在这里插入图片描述

    /**
     * 前台_分类刷题_查看分类下试题
     * @author kfj
     * @return ApiResult
     */
    @Override
    @Cacheable(value = "classifySubjectList", key = "#classifyId", cacheManager = "oneDay")
    public ApiResult<List<TotalSubject>> getCountByClassifyId(Long classifyId) {
        System.out.println("============================");
        QueryWrapper<TotalSubject> queryWrapper = new QueryWrapper<TotalSubject>();
        queryWrapper.in("classify_id",classifyId);
        List<TotalSubject> totalSubjects = totalSubjectMapper.selectList(queryWrapper); //根据分类id查询所有试题

        return ApiResult.success(totalSubjects);
    }
 /**
     *  新增保存考试试题总
     */
    @Override
    @CacheEvict(value = {"totalSubjectList"}, allEntries=true)
    public ApiResult totalSubjectSave(TotalSubject totalSubject, UserRoot user) {

        try {
            if("1".equals(totalSubject.getIsRelease())){
                totalSubject.setReleaseTime(new Date());
            }
            if(totalSubject.getClassifyId() != null){
                Classify classify = classifyMapper.selectById(totalSubject.getClassifyId());
                totalSubject.setClassifyName(classify.getClassifyName());
            }
            totalSubject.setCreateBy(user.getRealName());
            totalSubject.setCreateTime(new Date());
            super.save(totalSubject);
            classifyService.updateClassifyCache(totalSubject.getClassifyId());
            return ApiResult.success();
        }catch (Exception e){
            e.printStackTrace();
            return ApiResult.defaultError(null);
        }
    }

    /**
     * 修改保存考试试题总
     */
    @Override
    @CacheEvict(value = {"totalSubjectList"}, allEntries=true)
    public ApiResult totalSubjectUpdate(TotalSubject totalSubject, UserRoot user) {

        try {
            if(totalSubject.getSubjectId() != null) {
                if("1".equals(totalSubject.getIsRelease())){
                    totalSubject.setReleaseTime(new Date());
                }
                if(totalSubject.getClassifyId() != null){
                    Classify classify = classifyMapper.selectById(totalSubject.getClassifyId());
                    totalSubject.setClassifyName(classify.getClassifyName());
                }

                totalSubject.setUpdateBy(user.getRealName());
                totalSubject.setUpdateTime(new Date());
                super.update(totalSubject);
                classifyService.updateClassifyCache(totalSubject.getClassifyId());
                return ApiResult.success();
            }
        }catch (Exception e){
            e.printStackTrace();
            return ApiResult.defaultError(null);
        }
        return ApiResult.fail(MsgConstant.EXCEPTION_ID_NULL.getMsg());
    }
    @CacheEvict(value="classifySubjectList", key = "#classify",allEntries=false)
    public void updateClassifyCache(long classify) {

    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值