Java緩存框架教程,Caffeine內(nèi)存緩存框架

Java緩存框架教程,Caffeine內(nèi)存緩存框架

深圳達(dá)內(nèi)教育      2022-05-04 10:00:01     49

Java緩存框架教程,Caffeine內(nèi)存緩存框架,  Caffeine是一種高性能的緩存庫,是基于Java8的最佳(最優(yōu))緩存框架?! ache(緩存),基于GoogleGuava,Caffeine提供一

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹


  Caffeine是一種高性能的緩存庫,是基于Java8的最佳(最優(yōu))緩存框架。


  Cache(緩存),基于GoogleGuava,Caffeine提供一個內(nèi)存緩存,大大改善了設(shè)計Guava'scache和ConcurrentlinkedHashMap的體驗。



  緩存類似于ConcurrentMap,但二者并不完全相同。最基本的區(qū)別是,ConcurrentMap保存添加到其中的所有元素,直到顯式地刪除它們。另一方面,緩存通常配置為自動刪除條目,以限制其內(nèi)存占用。在某些情況下,LoadingCache或AsyncLoadingCache可能很有用,因為它是自動緩存加載的。


  Caffeine提供了靈活的結(jié)構(gòu)來創(chuàng)建緩存,并且有以下特性:


  自動加載條目到緩存中,可選異步方式


  可以基于大小剔除


  可以設(shè)置過期時間,時間可以從上次訪問或上次寫入開始計算


  異步刷新


  keys自動包裝在弱引用中


  values自動包裝在弱引用或軟引用中


  條目剔除通知


  緩存訪問統(tǒng)計


  1.加載/填充


  Caffeine提供以下四種類型的加載策略:


  1.1.Manual



  Cache接口可以顯式地控制檢索、更新和刪除條目。


  1.2.Loading



  LoadingCache通過關(guān)聯(lián)一個CacheLoader來構(gòu)建Cache


  通過LoadingCache的getAll方法,可以批量查詢


  1.3.Asynchronous(Manual)



  AsyncCache是另一種Cache,它基于Executor計算條目,并返回一個CompletableFuture。


  1.4.AsynchronouslyLoading



  AsyncLoadingCache是關(guān)聯(lián)了AsyncCacheLoader的AsyncCache


  2.剔除


  Caffeine提供三種剔除方式:基于大小、基于時間、基于引用


  2.1.Size-based



  如果緩存的條目數(shù)量不應(yīng)該超過某個值,那么可以使用Caffeine.maximumSize(long)。如果超過這個值,則會剔除很久沒有被訪問過或者不經(jīng)常使用的那個條目。


  如果,不同的條目有不同的權(quán)重值的話,那么你可以用Caffeine.weigher(Weigher)來指定一個權(quán)重函數(shù),并且使用Caffeine.maximumWeight(long)來設(shè)定最大的權(quán)重值。


  簡單的來說,要么限制緩存條目的數(shù)量,要么限制緩存條目的權(quán)重值,二者取其一。限制數(shù)量很好理解,限制權(quán)重的話首先你得提供一個函數(shù)來設(shè)定每個條目的權(quán)重值是多少,然后才能顯示最大的權(quán)重是多少。


  2.2.Time-based



  expireAfterAccess(long,TimeUnit):最后一次被訪問(讀或者寫)后多久失效


  expireAfterWrite(long,TimeUnit):最后一次被創(chuàng)建或修改后多久失效


  expireAfter(Expiry):創(chuàng)建后多久失效


  建議,主動維護(hù)緩存中條目,而不是等到訪問的時候發(fā)現(xiàn)緩存條目已經(jīng)失效了才去重新加載。意思就是,提前加載,定期維護(hù)。


  可以在構(gòu)建的時候Caffeine.scheduler(Scheduler)來指定調(diào)度線程


  2.3.Reference-based



  Caffeine.weakKeys()使用弱引用存儲key。如果沒有強引用這個key,則允許垃圾回收器回收該條目。注意,這是使用==判斷key的。


  Caffeine.weakValues()使用弱引用存儲value。如果沒有強引用這個value,則允許垃圾回收器回收該條目。注意,這是使用==判斷key的。


  Caffeine.softValues()使用軟引用存儲value。


  3.刪除


  術(shù)語:


  eviction指受策略影響而被刪除


  invalidation值被調(diào)用者手動刪除


  removal值因eviction或invalidation而發(fā)生的一種行為


  3.1.明確地刪除



  3.2.監(jiān)聽器



  4.刷新



  通過LoadingCache.refresh(K)進(jìn)行異步刷新,通過覆蓋CacheLoader.reload(K,V)可以自定義刷新邏輯


  5.統(tǒng)計



  使用Caffeine.recordStats(),你可以打開統(tǒng)計功能。Cache.stats()方法會返回一個CacheStats對象,該對象提供以下統(tǒng)計信息:


  hitRate():命中率


  evictionCount():被剔除的條目數(shù)量


  averageLoadPenalty():加載新值所花費的平均時間


  6.示例


  終于要說到重點了


  一般來講,用Redis作為一級話緩存,Caffeine作為二級緩存


  6.1.示例一:單獨使用


  pom.xml



  config



  service



  補充一點:你都用本地緩存了,必定已經(jīng)用了一級緩存了。一級緩存無法達(dá)到預(yù)期的性能,才會選擇用本地緩存。


  controller



  application.yml



  service



  用注解方便是方便,但是不好控制,還是自定義的好


  7.工程結(jié)構(gòu)


  


  完整的pom.xml



       以上就是深圳達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“java緩存框架教程,Caffeine內(nèi)存緩存框架”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


  相關(guān)內(nèi)容


  深入淺出的Java學(xué)習(xí)路徑,Java練手項目學(xué)習(xí)


  新手Java的三大框架ssh學(xué)習(xí)


  JavaSSH框架教學(xué)視頻


培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。