欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JetCache的配置和注解屬性的使用說明

 更新時(shí)間:2025年10月27日 10:53:25   作者:No8g攻城獅  
本文詳細(xì)介紹了JetCache的配置方法及各種注解的使用技巧,從YML配置文件入手,解析不同屬性的作用與意義,并對@Cached、@CacheUpdate、@CacheInvalidate等注解進(jìn)行了解,感興趣的可以了解一下

一、配置說明

yml配置文件案例(如果沒使用springboot,直接配置GlobalCacheConfig是類似的,參考快速入門教程):

jetcache:
  statIntervalMinutes: 15
  areaInCacheName: false
  hidePackages: com.alibaba
  local:
    default:
      type: caffeine
      limit: 100
      keyConvertor: fastjson
      expireAfterWriteInMillis: 100000
    otherArea:
      type: linkedhashmap
      limit: 100
      keyConvertor: none
      expireAfterWriteInMillis: 100000
  remote:
    default:
      type: redis
      keyConvertor: fastjson
      valueEncoder: java
      valueDecoder: java
      poolConfig:
        minIdle: 5
        maxIdle: 20
        maxTotal: 50
      host: ${redis.host}
      port: ${redis.port}
    otherArea:
      type: redis
      keyConvertor: fastjson
      valueEncoder: kryo
      valueDecoder: kryo
      poolConfig:
        minIdle: 5
        maxIdle: 20
        maxTotal: 50
      host: ${redis.host}
      port: ${redis.port}

配置通用說明如下:

屬性默認(rèn)值說明
jetcache.statIntervalMinutes0統(tǒng)計(jì)間隔,0表示不統(tǒng)計(jì)
jetcache.areaInCacheNametruejetcache-anno把cacheName作為遠(yuǎn)程緩存key前綴,2.4.3以前的版本總是把a(bǔ)reaName加在cacheName中,因此areaName也出現(xiàn)在key前綴中。2.4.4以后可以配置,為了保持遠(yuǎn)程key兼容默認(rèn)值為true,但是新項(xiàng)目的話false更合理些。
jetcache.hiddenPackages@Cached和@CreateCache自動(dòng)生成name的時(shí)候,為了不讓name太長,hiddenPackages指定的包名前綴被截掉
jetcache.[local|remote].${area}.type緩存類型。tair、redis為當(dāng)前支持的遠(yuǎn)程緩存;linkedhashmap、caffeine為當(dāng)前支持的本地緩存類型
jetcache.[local|remote].${area}.keyConvertorkey轉(zhuǎn)換器的全局配置,當(dāng)前只有一個(gè)已經(jīng)實(shí)現(xiàn)的keyConvertor:fastjson。僅當(dāng)使用@CreateCache且緩存類型為LOCAL時(shí)可以指定為none,此時(shí)通過equals方法來識別key。方法緩存必須指定keyConvertor
jetcache.[local|remote].${area}.valueEncoderjava序列化器的全局配置。僅remote類型的緩存需要指定,可選java和kryo
jetcache.[local|remote].${area}.valueDecoderjava序列化器的全局配置。僅remote類型的緩存需要指定,可選java和kryo
jetcache.[local|remote].${area}.limit100每個(gè)緩存實(shí)例的最大元素的全局配置,僅local類型的緩存需要指定。注意是每個(gè)緩存實(shí)例的限制,而不是全部,比如這里指定100,然后用@CreateCache創(chuàng)建了兩個(gè)緩存實(shí)例(并且注解上沒有設(shè)置localLimit屬性),那么每個(gè)緩存實(shí)例的限制都是100
jetcache.[local|remote].${area}.expireAfterWriteInMillis無窮大以毫秒為單位指定超時(shí)時(shí)間的全局配置(以前為defaultExpireInMillis)
jetcache.local.${area}.expireAfterAccessInMillis0需要jetcache2.2以上,以毫秒為單位,指定多長時(shí)間沒有訪問,就讓緩存失效,當(dāng)前只有本地緩存支持。0表示不使用這個(gè)功能。

上表中${area}對應(yīng)@Cached和@CreateCache的area屬性。注意如果注解上沒有指定area,默認(rèn)值是"default"。

關(guān)于緩存的超時(shí)時(shí)間,有多個(gè)地方指定,澄清說明一下:

  1. put等方法上指定了超時(shí)時(shí)間,則以此時(shí)間為準(zhǔn)
  2. put等方法上未指定超時(shí)時(shí)間,使用Cache實(shí)例的默認(rèn)超時(shí)時(shí)間
  3. Cache實(shí)例的默認(rèn)超時(shí)時(shí)間,通過在@CreateCache和@Cached上的expire屬性指定,如果沒有指定,使用yml中定義的全局配置,例如@Cached(cacheType=local)使用jetcache.local.default.expireAfterWriteInMillis,如果仍未指定則是無窮大

二、注解屬性說明

JetCache方法緩存和SpringCache比較類似,它原生提供了TTL支持,以保證最終一致,并且支持二級緩存。JetCache2.4以后支持基于注解的緩存更新和刪除。

在spring環(huán)境下,使用@Cached注解可以為一個(gè)方法添加緩存,@CacheUpdate用于更新緩存,@CacheInvalidate用于移除緩存元素。注解可以加在接口上也可以加在類上,加注解的類必須是一個(gè)spring bean,例如:

public interface UserService {
    @Cached(name="userCache.", key="#userId", expire = 3600)
    User getUserById(long userId);

    @CacheUpdate(name="userCache.", key="#user.userId", value="#user")
    void updateUser(User user);

    @CacheInvalidate(name="userCache.", key="#userId")
    void deleteUser(long userId);
}

key使用Spring的SpEL腳本來指定。如果要使用參數(shù)名(比如這里的key="#userId"),項(xiàng)目編譯設(shè)置target必須為1.8格式,并且指定javac的-parameters參數(shù),否則就要使用key="args[0]"這樣按下標(biāo)訪問的形式。

@CacheUpdate和@CacheInvalidate的name和area屬性必須和@Cached相同,name屬性還會(huì)用做cache的key前綴。

@Cached注解和@CreateCache的屬性非常類似,但是多幾個(gè):

屬性默認(rèn)值說明
area“default”如果在配置中配置了多個(gè)緩存area,在這里指定使用哪個(gè)area
name未定義指定緩存的唯一名稱,不是必須的,如果沒有指定,會(huì)使用類名+方法名。name會(huì)被用于遠(yuǎn)程緩存的key前綴。另外在統(tǒng)計(jì)中,一個(gè)簡短有意義的名字會(huì)提高可讀性。
key未定義使用SpEL指定key,如果沒有指定會(huì)根據(jù)所有參數(shù)自動(dòng)生成。
expire未定義超時(shí)時(shí)間。如果注解上沒有定義,會(huì)使用全局配置,如果此時(shí)全局配置也沒有定義,則為無窮大
timeUnitTimeUnit.SECONDS指定expire的單位
cacheTypeCacheType.REMOTE緩存的類型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定義為BOTH,會(huì)使用LOCAL和REMOTE組合成兩級緩存
localLimit未定義如果cacheType為LOCAL或BOTH,這個(gè)參數(shù)指定本地緩存的最大元素?cái)?shù)量,以控制內(nèi)存占用。如果注解上沒有定義,會(huì)使用全局配置,如果此時(shí)全局配置也沒有定義,則為100
localExpire未定義僅當(dāng)cacheType為BOTH時(shí)適用,為內(nèi)存中的Cache指定一個(gè)不一樣的超時(shí)時(shí)間,通常應(yīng)該小于expire
serialPolicy未定義指定遠(yuǎn)程緩存的序列化方式??蛇x值為SerialPolicy.JAVA和SerialPolicy.KRYO。如果注解上沒有定義,會(huì)使用全局配置,如果此時(shí)全局配置也沒有定義,則為SerialPolicy.JAVA
keyConvertor未定義指定KEY的轉(zhuǎn)換方式,用于將復(fù)雜的KEY類型轉(zhuǎn)換為緩存實(shí)現(xiàn)可以接受的類型,當(dāng)前支持KeyConvertor.FASTJSON和KeyConvertor.NONE。NONE表示不轉(zhuǎn)換,F(xiàn)ASTJSON可以將復(fù)雜對象KEY轉(zhuǎn)換成String。如果注解上沒有定義,會(huì)使用全局配置。
enabledtrue是否激活緩存。例如某個(gè)dao方法上加緩存注解,由于某些調(diào)用場景下不能有緩存,所以可以設(shè)置enabled為false,正常調(diào)用不會(huì)使用緩存,在需要的地方可使用CacheContext.enableCache在回調(diào)中激活緩存,緩存激活的標(biāo)記在ThreadLocal上,該標(biāo)記被設(shè)置后,所有enable=false的緩存都被激活
cacheNullValuefalse當(dāng)方法返回值為null的時(shí)候是否要緩存
condition未定義使用SpEL指定條件,如果表達(dá)式返回true的時(shí)候才去緩存中查詢
postCondition未定義使用SpEL指定條件,如果表達(dá)式返回true的時(shí)候才更新緩存,該評估在方法執(zhí)行后進(jìn)行,因此可以訪問到#result

@CacheInvalidate注解說明:

屬性默認(rèn)值說明
area“default”如果在配置中配置了多個(gè)緩存area,在這里指定使用哪個(gè)area,指向?qū)?yīng)的@Cached定義。
name未定義指定緩存的唯一名稱,指向?qū)?yīng)的@Cached定義。
key未定義使用SpEL指定key
condition未定義使用SpEL指定條件,如果表達(dá)式返回true才執(zhí)行刪除,可訪問方法結(jié)果#result

@CacheUpdate注解說明:

屬性默認(rèn)值說明
area“default”如果在配置中配置了多個(gè)緩存area,在這里指定使用哪個(gè)area,指向?qū)?yīng)的@Cached定義。
name未定義指定緩存的唯一名稱,指向?qū)?yīng)的@Cached定義。
key未定義使用SpEL指定key
value未定義使用SpEL指定value
condition未定義使用SpEL指定條件,如果表達(dá)式返回true才執(zhí)行更新,可訪問方法結(jié)果#result

使用@CacheUpdate和@CacheInvalidate的時(shí)候,相關(guān)的緩存操作可能會(huì)失敗(比如網(wǎng)絡(luò)IO錯(cuò)誤),所以指定緩存的超時(shí)時(shí)間是非常重要的。

@CacheRefresh注解說明:

屬性默認(rèn)值說明
refresh未定義刷新間隔
timeUnitTimeUnit.SECONDS時(shí)間單位
stopRefreshAfterLastAccess未定義指定該key多長時(shí)間沒有訪問就停止刷新,如果不指定會(huì)一直刷新
refreshLockTimeout60秒類型為BOTH/REMOTE的緩存刷新時(shí),同時(shí)只會(huì)有一臺(tái)服務(wù)器在刷新,這臺(tái)服務(wù)器會(huì)在遠(yuǎn)程緩存放置一個(gè)分布式鎖,此配置指定該鎖的超時(shí)時(shí)間

@CachePenetrationProtect注解:

當(dāng)緩存訪問未命中的情況下,對并發(fā)進(jìn)行的加載行為進(jìn)行保護(hù)。 當(dāng)前版本實(shí)現(xiàn)的是單JVM內(nèi)的保護(hù),即同一個(gè)JVM中同一個(gè)key只有一個(gè)線程去加載,其它線程等待結(jié)果。

對于以上未定義默認(rèn)值的參數(shù),如果沒有指定,將使用yml中指定的全局配置,全局配置請參考配置說明。

到此這篇關(guān)于JetCache的配置和注解屬性的使用說明的文章就介紹到這了,更多相關(guān)JetCache 配置和注解屬性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java內(nèi)置GUI Frame類的使用

    Java內(nèi)置GUI Frame類的使用

    這篇文章主要介紹了Java內(nèi)置GUI Frame類的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java線程協(xié)調(diào)運(yùn)行操作實(shí)例詳解

    Java線程協(xié)調(diào)運(yùn)行操作實(shí)例詳解

    這篇文章主要介紹了Java線程協(xié)調(diào)運(yùn)行操作,結(jié)合具體實(shí)例形式詳細(xì)分析了Java線程協(xié)調(diào)運(yùn)行原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java圖片壓縮三種高效壓縮方案詳細(xì)解析

    Java圖片壓縮三種高效壓縮方案詳細(xì)解析

    圖片壓縮通常涉及減少圖片的尺寸縮放、調(diào)整圖片的質(zhì)量(針對JPEG、PNG等)、使用特定的算法來減少圖片的數(shù)據(jù)量等,這篇文章主要介紹了Java圖片壓縮三種高效壓縮方案的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • Java中map內(nèi)部存儲(chǔ)方式解析

    Java中map內(nèi)部存儲(chǔ)方式解析

    這篇文章主要介紹了Java中map內(nèi)部存儲(chǔ)方式解析的相關(guān)內(nèi)容,涉及其實(shí)現(xiàn)方式,以及對存儲(chǔ)方式作了簡單的比較,具有一定參考價(jià)值,需要的朋友可了解下。
    2017-10-10
  • Sentinel 斷路器在Spring Cloud使用詳解

    Sentinel 斷路器在Spring Cloud使用詳解

    Sentinel是阿里巴巴開源的一款微服務(wù)流量控制組件,主要以流量為切入點(diǎn),從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護(hù)、熱點(diǎn)流量防護(hù)等多個(gè)維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性,本文介紹Sentinel 斷路器在Spring Cloud使用,感興趣的朋友一起看看吧
    2025-02-02
  • Java連接并操作Redis超詳細(xì)教程

    Java連接并操作Redis超詳細(xì)教程

    在分布式系統(tǒng)和高并發(fā)場景中,Redis?作為高性能內(nèi)存數(shù)據(jù)庫的地位舉足輕重,對于?Java?開發(fā)者而言,掌握?Redis?的連接與操作是進(jìn)階必備技能,本文從?Java?操作?Redis?的核心需求出發(fā),通過完整代碼示例與逐行解析,需要的朋友可以參考下
    2025-05-05
  • springboot實(shí)現(xiàn)讀取nacos配置文件

    springboot實(shí)現(xiàn)讀取nacos配置文件

    這篇文章主要介紹了springboot實(shí)現(xiàn)讀取nacos配置文件方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中Cookie和Session的那些事兒

    Java中Cookie和Session的那些事兒

    Cookie和Session都是為了保持用戶的訪問狀態(tài),一方面為了方便業(yè)務(wù)實(shí)現(xiàn),另一方面為了簡化服務(wù)端的程序設(shè)計(jì)。這篇文章主要介紹了java中cookie和session的知識,需要的朋友可以參考下
    2016-09-09
  • java開發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用

    java開發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用

    這篇文章主要為大家介紹了java開發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java Set集合及其子類HashSet與LinkedHashSet詳解

    Java Set集合及其子類HashSet與LinkedHashSet詳解

    這篇文章主要介紹了Java Set集合及其子類HashSet與LinkedHashSet詳解,文章通過Set集合存儲(chǔ)原理展開文章主題相關(guān)介紹,感興趣的小伙伴可以參考一下
    2022-06-06

最新評論