2022-02-18 @Cacheable中 unless用法

昨天用Cacheable这个注解发现一个问题
流程 插入一条数据

正常使用时先查缓存
如果不存在,那么插入数据
如果存在则直接返回

查询语句方法上面加入 @Cacheable后
第一次调用插入 正常插入一条数据
第二次入参完全相同 再次插入一条数据 还是能插入数据库

缓存没有生效?

打开rdm发现 key下面存了一个"[ ]"
因为查询语句返回的是一个list ,推断redis里面就是存了一个空集合

@Cacheable的流程应该是第一次查出来为空 那么就缓存一个空进去
这样1是不能幂等了 2是缓存速度快也没啥用

查阅资料后发现有个在上边加上unless可以防止
具体就是

 @Cacheable(cacheNames = "batchService",key = "'person'+'_'+#name+'_'+#age", unless = "#result?.size() == 0")
List list = xxx.select(@Param("name") String name,@param("age") Integer age)

大致是这个意思 这是对于集合 如果是对象 可以是result==null用来防止缓存一个空

你可能感兴趣的:(2022-02-18 @Cacheable中 unless用法)