SpringCache常用注解及key中参数值为null问题解析
常用注解及参数
@Cacheable(参数)
该注解一般加在读方法上,将方法返回的数据加到缓存。
参数:
| 参数名 | 说明 | 举例 |
|---|---|---|
| value | 存到Redis中的key的前缀 | value="cache:test" |
| key | 存到Redis中key的后半部分 | key="#p0 + ':' + #p1" |
| unless | 不缓存的数据 | unless="#result == null" |
| condition | 要缓存的数据,与unless相反 |
表中 #p0 为参数,0表示第一个参数,依次类推。也可以直接写参数名。
表中 #result 为方法返回结果。
@CacheEvict(参数)
该注解一般加在写方法上,删除缓存中对应的key。
参数:
| 参数名 | 说明 | 举例 |
|---|---|---|
| value | 要删除的key的前缀 | value="cache:test" |
| key | 要删除的key的后半部分 | key="#p0 + ':' + #p1" |
| allEntries | 是否删除value下的所有key | allEntries=true |
@Caching(参数)
用于同时添加多个缓存注解,比如:
@Caching(evict={
@CacheEvict(...)
@CacheEvict(...)
...
})
key中的值为null的问题
我在接口的方法上加了@Cacheable注解,如下:
@Cacheable(value="cache:test", key="'id='+#id",unless="#result==null") String getNameById(Integer id);
然后Redis中的缓存key为:cache:test::id=null
究其原因,是因为实现类的参数名不叫id。
key中参数的名字,必须与实现类中的参数名称一致,才能取到值。
如果写名字比较麻烦怕出错,可以写#p0,取第一个参数,就跟名字脱离关系了。
另外,如果key中只有参数,且这个参数又为null,那么就会报错:
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.xxx.service.impl.XXXServiceImpl.singleValue(java.lang.String)] caches=[cache:test:singleValue] | key='#id' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='#result == null' | sync='false'
以上就是SpringCache常用注解及key中参数值为null的问题解析的详细内容,更多关于SpringCache key参数值null的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能
这篇文章主要介绍了SpringBoot 整合 Elasticsearch 实现海量级数据搜索,本文主要围绕 SpringBoot 整合 ElasticSearch 接受数据的插入和搜索使用技巧,在实际的使用过程中,版本号尤其的重要,不同版本的 es,对应的 api 是不一样,需要的朋友可以参考下2022-07-07


最新评论