最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、配置說明

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}

配置通用說明如下:

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

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

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

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

二、注解屬性說明

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

在spring環(huán)境下,使用@Cached注解可以為一個方法添加緩存,@CacheUpdate用于更新緩存,@CacheInvalidate用于移除緩存元素。注解可以加在接口上也可以加在類上,加注解的類必須是一個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"),項目編譯設(shè)置target必須為1.8格式,并且指定javac的-parameters參數(shù),否則就要使用key="args[0]"這樣按下標(biāo)訪問的形式。

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

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

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

@CacheInvalidate注解說明:

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

@CacheUpdate注解說明:

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

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

@CacheRefresh注解說明:

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

@CachePenetrationProtect注解:

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

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

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

相關(guān)文章

  • SpringBoot三種打包方法舉例詳解

    SpringBoot三種打包方法舉例詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot三種打包方法的相關(guān)資料,Spring Boot是一個開發(fā)框架,目的是簡化Spring應(yīng)用的初始搭建過程和開發(fā)過程,文中提供了3種打包方法,需要的朋友可以參考下
    2023-12-12
  • Java 在PPT中創(chuàng)建散點圖的實現(xiàn)示例

    Java 在PPT中創(chuàng)建散點圖的實現(xiàn)示例

    本文將以Java代碼示例展示如何在PPT幻燈片中創(chuàng)建散點圖表。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java使用LinkedHashMap進行分數(shù)排序

    Java使用LinkedHashMap進行分數(shù)排序

    這篇文章主要介紹了Java使用LinkedHashMap進行分數(shù)排序的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java實現(xiàn)屏蔽詞功能

    java實現(xiàn)屏蔽詞功能

    這篇文章主要介紹了java實現(xiàn)屏蔽詞功能,類似貼吧里面屏蔽各種用戶的發(fā)帖內(nèi)容,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Springboot常用注解及配置文件加載順序詳解

    Springboot常用注解及配置文件加載順序詳解

    這篇文章主要介紹了Springboot常用注解及配置文件加載順序,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • Shell腳本管理Java應(yīng)用程序的高效方法

    Shell腳本管理Java應(yīng)用程序的高效方法

    在軟件開發(fā)中,管理和監(jiān)控 Java 應(yīng)用程序的運行狀態(tài)變得愈加重要,本文將分享一個自用的簡單但高效的 Shell 腳本,幫助輕松管理 JAR 包的啟動、停止和日志管理,需要的朋友可以參考下
    2024-09-09
  • 總結(jié)Java常用排序算法

    總結(jié)Java常用排序算法

    在本文里我們給大家整理了關(guān)于Java常用排序算法以及實例代碼分析,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • Java SpringBoot實現(xiàn)文件上傳功能的示例代碼

    Java SpringBoot實現(xiàn)文件上傳功能的示例代碼

    這篇文章主要介紹了如何利用Java SpringBoot實現(xiàn)文件上傳功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)有一定幫助,需要的可以參考一下
    2022-03-03
  • SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn)

    SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn)

    在SpringBoot項目中,常常會把代碼文件放入不同的包中,本文主要介紹了SpringBoot中各個層級結(jié)構(gòu)的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • 使用springboot實現(xiàn)上傳文件時校驗文件是否有病毒

    使用springboot實現(xiàn)上傳文件時校驗文件是否有病毒

    在SpringBoot中實現(xiàn)文件上傳時的病毒校驗,可以使用ClamAV、Metascan或VirusTotal等工具,這些工具通過掃描上傳的文件,可以有效地檢測和阻止惡意軟件的傳播,安裝和配置ClamAV服務(wù)的步驟如下:下載并安裝ClamAV二進制文件,配置clamd.conf文件
    2025-01-01

最新評論

宁城县| 米脂县| 道孚县| 洪湖市| 商河县| 辛集市| 磐安县| 都匀市| 布尔津县| 夹江县| 成安县| 柯坪县| 垦利县| 金昌市| 东辽县| 德安县| 来宾市| 比如县| 聂荣县| 灌阳县| 会宁县| 布尔津县| 荔波县| 新郑市| 威海市| 沭阳县| 凯里市| 清镇市| 安徽省| 巴彦淖尔市| 施秉县| 乐都县| 巴南区| 会宁县| 邢台市| 晋城| 岢岚县| 响水县| 尼木县| 禹城市| 江陵县|