java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringCache key参数值null

SpringCache常用注解及key中参数值为null问题解析

作者:晓晓先生

这篇文章主要介绍了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下的所有keyallEntries=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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文