SpringCache常用注解及key中參數(shù)值為null問題解析
常用注解及參數(shù)
@Cacheable(參數(shù))
該注解一般加在讀方法上,將方法返回的數(shù)據(jù)加到緩存。
參數(shù):
參數(shù)名 | 說明 | 舉例 |
---|---|---|
value | 存到Redis中的key的前綴 | value="cache:test" |
key | 存到Redis中key的后半部分 | key="#p0 + ':' + #p1" |
unless | 不緩存的數(shù)據(jù) | unless="#result == null" |
condition | 要緩存的數(shù)據(jù),與unless相反 |
表中 #p0 為參數(shù),0表示第一個參數(shù),依次類推。也可以直接寫參數(shù)名。
表中 #result 為方法返回結(jié)果。
@CacheEvict(參數(shù))
該注解一般加在寫方法上,刪除緩存中對應(yīng)的key。
參數(shù):
參數(shù)名 | 說明 | 舉例 |
---|---|---|
value | 要刪除的key的前綴 | value="cache:test" |
key | 要刪除的key的后半部分 | key="#p0 + ':' + #p1" |
allEntries | 是否刪除value下的所有key | allEntries=true |
@Caching(參數(shù))
用于同時添加多個緩存注解,比如:
@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
究其原因,是因為實現(xiàn)類的參數(shù)名不叫id。
key中參數(shù)的名字,必須與實現(xiàn)類中的參數(shù)名稱一致,才能取到值。
如果寫名字比較麻煩怕出錯,可以寫#p0,取第一個參數(shù),就跟名字脫離關(guān)系了。
另外,如果key中只有參數(shù),且這個參數(shù)又為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中參數(shù)值為null的問題解析的詳細內(nèi)容,更多關(guān)于SpringCache key參數(shù)值null的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IntelliJ IDEA 設(shè)置數(shù)據(jù)庫連接全局共享的步驟
在日常的軟件開發(fā)工作中,我們經(jīng)常會遇到需要在多個項目之間共享同一個數(shù)據(jù)庫連接的情況,默認情況下,IntelliJ IDEA 中的數(shù)據(jù)庫連接配置是針對每個項目單獨存儲的,幸運的是,IntelliJ IDEA 提供了一種方法來將數(shù)據(jù)庫連接配置設(shè)置為全局共享,從而簡化這一過程2024-10-10SpringBoot?整合?Elasticsearch?實現(xiàn)海量級數(shù)據(jù)搜索功能
這篇文章主要介紹了SpringBoot?整合?Elasticsearch?實現(xiàn)海量級數(shù)據(jù)搜索,本文主要圍繞?SpringBoot?整合?ElasticSearch?接受數(shù)據(jù)的插入和搜索使用技巧,在實際的使用過程中,版本號尤其的重要,不同版本的?es,對應(yīng)的?api?是不一樣,需要的朋友可以參考下2022-07-07SpringCloud Zuul實現(xiàn)負載均衡和熔斷機制方式
這篇文章主要介紹了SpringCloud Zuul實現(xiàn)負載均衡和熔斷機制方式,具有很好的參考價值,希望對大家有所幫助。2021-07-07