国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

緩存之美——如何選擇合適的本地緩存?

這篇具有很好參考價值的文章主要介紹了緩存之美——如何選擇合適的本地緩存?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、簡介

小編最近在使用系統(tǒng)的時候,發(fā)現(xiàn)盡管應用已經(jīng)使用了redis緩存提高查詢效率,但是仍然有進一步優(yōu)化的空間,于是想到了比分布式緩存性能更好的本地緩存,因此對領域內(nèi)常用的本地緩存進行了一番調(diào)研,有早期的Guava緩存、在Guava上進一步傳承的Caffine以及自稱在Java中使用最廣泛的EhCache,那么我們該怎么選擇適合自己應用的緩存呢,小編下面會簡單介紹,并將以上緩存進行一個對比,希望幫助大家選擇最適合自己系統(tǒng)的本地緩存。

2、Guava緩存簡介

Guava cache是Google開發(fā)的Guava工具包中一套完善的JVM本地緩存框架,底層實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)類似于ConcurrentHashMap,但是進行了更多的能力拓展,包括緩存過期時間設置、緩存容量設置、多種淘汰策略、緩存監(jiān)控等,下面簡單介紹下這些功能及其使用方式。

2.1、緩存過期時間設置

Guava的過期時間設置有基于創(chuàng)建時間和最后一次訪問時間兩種策略.

(1) 基于創(chuàng)建時間

通過對比緩存記錄的插入時間來判斷,比如設置過期時間為5分鐘,不管中間有沒有訪問,到時過期。

public Cache<String, String> createCache() {    
    return CacheBuilder.newBuilder()
    .expireAfterWrite(5L, TimeUnit.MINUTES)
    .build();
}

(2) 基于過期時間

通過對比最近最后一次的訪問時間,比如設置5分鐘,每次訪問之后都會刷新過期時間為5分鐘,只有持續(xù)5分鐘沒有被訪問到才會過期。

public Cache<String, String> createCache() {    
    return CacheBuilder.newBuilder()
    .expireAfterAccess(5L, TimeUnit.MINUTES)
    .build();
}

2.2、緩存容量和淘汰策略設置

Guava cache是內(nèi)存型緩存,有內(nèi)存溢出風險,因此需要設置緩存的最大存儲上限,通過緩存的條數(shù)或每條緩存的權重來判斷是否達到了設定閾值,當緩存的數(shù)據(jù)量達到設定閾值之后,Guava cache支持使用FIFO和LRU的策略對緩存記錄采取淘汰的措施。

(1)限制緩存記錄條數(shù)

public Cache<String, User> createCache() {    
    return CacheBuilder.newBuilder()
    .maximumSize(100L)
    .build();
}

(2)限制緩存記錄權重

public Cache<String, User> createCache() {    
    return CacheBuilder.newBuilder()
    .maximumWeight(100L)
    .weigher((key, value) (int) Math.ceil(instrumentation.getObjectSize(value) / 1024L))       
    .build();
}

使用限制緩存記錄權重時要先計算weight的value對象的字節(jié)數(shù),每1kb字節(jié)作為一個權重,對比限制緩存記錄,我們就能將緩存的總占用限制在100kb左右。

2.3緩存監(jiān)控

緩存記錄的加載和命中情況是評價緩存處理能力的重要指標,Guava cache提供了stat統(tǒng)計日志對這兩個指標進行了統(tǒng)計,我們只需要在創(chuàng)建緩存容器的時候加上recordStats就可以開啟統(tǒng)計。

public Cache<String, User> createCache() {    
    return CacheBuilder.newBuilder()
    .recordStats()
    .build();
}

2.4 Guava cache的優(yōu)劣勢和適用場景

優(yōu)劣勢:Guava cache通過內(nèi)存處理數(shù)據(jù),具有減少IO請求,讀寫性能快的優(yōu)勢,但是受內(nèi)存容量限制,只能處理少量數(shù)據(jù)的讀寫,還有可能對本機內(nèi)存造成壓力,并且在分布式部署中,會存在不同機器節(jié)點數(shù)據(jù)不一致的情況,即緩存漂移。

適用場景:讀多寫少,對數(shù)據(jù)一致性要求不高的場景。

3、Caffeine簡介

Caffeine同樣是Google開發(fā)的,是在Guava cache的基礎上改良而來的,底層設計思路、功能和使用方式與Guava非常類似,但是各方面的性能都要遠遠超過前者,可以看做是Guava cache的升級版,因此,之前使用過Guava cache,也能夠很快的上手Caffeine,下面是Caffeine和Guava cache的緩存創(chuàng)建對比,基本可以無門檻過渡。

public Cache<String, String> createCache() {
    return Caffeine.newBuilder()
        .initialCapacity(1000)
        .maximumSize(100L)
        .expireAfterWrite(5L, TimeUnit.MINUTES)

        .recordStats()
        .build();
}

public Cache<String, String> createCache() {    
    return CacheBuilder.newBuilder()
    .initialCapacity(1000)
    .maximumSize(100L)
    .expireAfterWrite(5L, TimeUnit.MINUTES)
    .recordStats()
    .build();
}

那么Caffeine底層又做了哪些優(yōu)化,才能讓其性能高于Guava cache呢?主要包含以下三點:

3.1、對比Guava cache的性能主要優(yōu)化項

(1)異步策略

Guava cache在讀操作中可能會觸發(fā)淘汰數(shù)據(jù)的清理操作,雖然自身也做了一些優(yōu)化來減少讀的時候的清理操作,但是一旦觸發(fā),就會降低查詢效率,對緩存性能產(chǎn)生影響。而在Caffeine支持異步操作,采用異步處理的策略,查詢請求在觸發(fā)淘汰數(shù)據(jù)的清理操作后,會將清理數(shù)據(jù)的任務添加到獨立的線程池中進行異步操作,不會阻塞查詢請求,提高了查詢性能。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-780184.html

?

?

?

(2)ConcurrentHashMap優(yōu)化

Caffeine底層都是通過ConcurrentHashMap來進行數(shù)據(jù)的存儲,因此隨著Java8中對ConcurrentHashMap的調(diào)整,數(shù)組+鏈表的結(jié)構(gòu)升級為數(shù)組+鏈表+紅黑樹的結(jié)構(gòu)以及分段鎖升級為syschronized+CAS,降低了鎖的粒度,減少了鎖的競爭,這兩個優(yōu)化顯著提高了Caffeine在讀多寫少場景下的查詢性能。

?

(3)新型淘汰算法W-TinyLFU

傳統(tǒng)的淘汰算法,如LRU、LFU、FIFO,在實際的緩存場景中都存在一些弊端,如FIFO算法,如果緩存使用的頻率較高,那么緩存數(shù)據(jù)會一直處在進進出出的狀態(tài),間接影響到緩存命中率。LRU算法,在批量刷新緩存數(shù)據(jù)的場景下,可能會將其他緩存數(shù)據(jù)淘汰掉,從而帶來緩存擊穿的風險。LFU算法,需要保存緩存記錄的訪問次數(shù),帶來內(nèi)存空間的損耗。

因此,Caffeine引入了W-TinyLFU算法,由窗口緩存、過濾器、主緩存組成。緩存數(shù)據(jù)剛進入時會停留在窗口緩存中,這個部分只占總緩存的1%,當被擠出窗口緩存時,會在過濾器匯總和主緩存中淘汰的數(shù)據(jù)進行比較,如果頻率更高,則進入主緩存,否則就被淘汰,主緩存被分為淘汰段和保護段,兩段都是LRU算法,第一次被訪問的元素會進入淘汰段,第二次被訪問會進入保護段,保護段中被淘汰的元素會進入淘汰段,這種算法實現(xiàn)了高命中率和低內(nèi)存占用。更詳細的解釋可以參考論文:https://arxiv.org/pdf/1512.00727.pdf

?

?

?

3.2、Caffeine的優(yōu)劣勢和適用場景

優(yōu)勢:對比Guava cache有更高的緩存性能,劣勢:仍然存在緩存漂移的問題;JDK版本過低無法使用

適用場景:1、適用場景:讀多寫少,對數(shù)據(jù)一致性要求不高的場景;2、純內(nèi)存緩存,JDK8及更高版本中,追求比Guava cache更高的性能。

4、Ehcache簡介

Guava cache和Caffeine都是JVM緩存,會受到內(nèi)存大小的制約,最新的Ehcache采用堆內(nèi)緩存+堆外緩存+磁盤的方式,打破了這一制約。堆內(nèi)緩存就是被JVM管理的那一部分緩存,而堆外緩存,就是在內(nèi)存中另外在開辟一塊不被JVM管理的部分。堆外緩存這部分既可以享受內(nèi)存的高速讀寫能力,而且又避免的JVM頻繁的GC,缺點是需要自行清理數(shù)據(jù)。

?

?

?

下面是Ehcache緩存的創(chuàng)建,指定了堆內(nèi)、堆外緩存和磁盤緩存的大小。

ResourcePoolsBuilder.newResourcePoolsBuilder()
    .heap(20, MemoryUnit.MB)
    .offheap(10, MemoryUnit.MB)
    .disk(5, MemoryUnit.GB);

為了解決緩存漂移的問題,Ehcache支持通過集群的方式,實現(xiàn)了分布式節(jié)點之間的數(shù)據(jù)互通。關于Ehcache的集群策略,后續(xù)文章再詳細闡述。

5、不同本地緩存對比

框架 命中率 速度 回收算法 使用難度 集群 適用場景
Guava cache 第三 LRU、LFU、FIFO 不支持 讀多寫少,允許少量緩存偏移
Caffeine 第一 W-TinyLFU 不支持 讀多寫少,允許少量緩存偏移,能用Caffeine就別用Guava cache
Ehcache 第二 LRU、LFU、FIFO 支持 分布式系統(tǒng)中對數(shù)據(jù)一致性要求高

?

作者:京東保險 郭盼

來源:京東云開發(fā)者社區(qū) 轉(zhuǎn)載請注明來源

?

到了這里,關于緩存之美——如何選擇合適的本地緩存?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 黑盒、白盒、灰盒,如何選擇合適的模糊測試工具?

    黑盒、白盒、灰盒,如何選擇合適的模糊測試工具?

    在軟件開發(fā)和安全領域,模糊測試是一種常用技術,用于發(fā)現(xiàn)應用程序或系統(tǒng)中的潛在漏洞和安全弱點。選擇不同的模糊測試方法將極大地影響測試的有效性和效率。 本文將比較對比黑盒、白盒和灰盒模糊測試的特點和優(yōu)勢并提供選型指導。 模糊測試的分類 黑盒模糊測試

    2024年02月09日
    瀏覽(27)
  • 解析數(shù)據(jù)可視化工具:如何選擇最合適的軟件

    解析數(shù)據(jù)可視化工具:如何選擇最合適的軟件

    在當今信息爆炸的時代,數(shù)據(jù)已成為各行各業(yè)的重要資源。為了更好地理解和分析數(shù)據(jù),數(shù)據(jù)可視化成為一種必不可少的工具。市面上數(shù)據(jù)可視化工具不說上千也有上百,什么帆軟、powerbi、把阿里datav,騰訊云圖、山海鯨可視化等等等等,讓我們選的抓狂。 ? 對于新手小白來

    2024年02月15日
    瀏覽(24)
  • 在線辦公時代,如何選擇合適的云辦公軟件?

    在線辦公時代,如何選擇合適的云辦公軟件?

    隨著數(shù)字經(jīng)濟的發(fā)展和疫情的影響,云辦公已成為企業(yè)數(shù)字化轉(zhuǎn)型和遠程協(xié)作的必然趨勢。云辦公的發(fā)展不僅意味著工具與技術的迭代,更是組織環(huán)節(jié)與業(yè)務流程的進化。云辦公可以突破傳統(tǒng)辦公模式在地域、時間、終端設備上的限制,既簡化了員工與團隊的辦公流程,給用

    2024年02月04日
    瀏覽(31)
  • 如何選擇合適的GPU進行渲染?最佳渲染GPU推薦

    如何選擇合適的GPU進行渲染?最佳渲染GPU推薦

    以下是為 3D 藝術選擇顯卡的一些技巧: 考慮一下您的預算 : 顯卡的價格從幾百元到幾萬元不等。在開始購物之前確定您愿意花多少錢。 閱讀評論 : 網(wǎng)上有很多關于顯卡的評論,閱讀它們以了解特定卡的性能如何。 決定您要創(chuàng)作哪種 3D 藝術 : 如果您剛剛開始,您可能不

    2024年02月13日
    瀏覽(28)
  • 數(shù)據(jù)搜索的實用工具:如何選擇合適的搜索引擎

    數(shù)據(jù)搜索是現(xiàn)代人工智能和大數(shù)據(jù)技術的基石,它為各種應用提供了強大的支持。隨著數(shù)據(jù)規(guī)模的不斷擴大,傳統(tǒng)的搜索方法已經(jīng)無法滿足需求。因此,選擇合適的搜索引擎成為了關鍵。本文將介紹數(shù)據(jù)搜索的實用工具及其選擇原則,以及相關算法原理、具體操作步驟和數(shù)學

    2024年04月16日
    瀏覽(31)
  • 構(gòu)建穩(wěn)定的爬蟲系統(tǒng):如何選擇合適的HTTP代理服務商

    構(gòu)建穩(wěn)定的爬蟲系統(tǒng):如何選擇合適的HTTP代理服務商

    在構(gòu)建一個穩(wěn)定、高效的爬蟲系統(tǒng)中,選擇合適的HTTP代理服務商是至關重要的一步。本文將介紹如何選取可靠且性能優(yōu)秀的HTTP代理服務供應商,來完成搭建一個強大而穩(wěn)定的爬蟲系統(tǒng)。 1.了解不同類型和特點 -免費公開代理服務器:提供免費但可能存在限制或不夠安全; -收費

    2024年02月10日
    瀏覽(22)
  • 騰訊云服務器配置怎么選擇?CPU內(nèi)存帶寬系統(tǒng)盤如何選合適?

    騰訊云服務器配置包括CPU內(nèi)存、公網(wǎng)帶寬和系統(tǒng)盤,云服務器分為CVM服務器和輕量應用服務器,騰訊云服務器網(wǎng)來詳細說下騰訊云服務器配置怎么選擇?到底是選擇云服務器CVM還是輕量應用服務器?CPU內(nèi)存選擇幾核幾G?公網(wǎng)帶寬多大合適?云服務器系統(tǒng)盤類型怎么選擇? 目

    2024年02月11日
    瀏覽(32)
  • 如何根據(jù)需求選擇合適的數(shù)據(jù)庫管理工具?Navicat OR DBeaver

    1.寫在前面 在閱讀本文之前,糖糖給大家準備了Navicat和DBeaver安裝包,在公眾號內(nèi)回復“Navicat”或“DBeaver”或\\\"數(shù)據(jù)庫管理工具\\\"來下載。 2. 引言 對于測試而言,在實際工作中往往會用到數(shù)據(jù)庫,那么選擇使用哪種類型的數(shù)據(jù)庫管理工具顯的尤為重要,我們常用的數(shù)據(jù)庫管理

    2023年04月17日
    瀏覽(19)
  • 服務器中E5和I9的區(qū)別是什么,如何選擇合適的配置

    服務器中E5和I9的區(qū)別是什么,如何選擇合適的配置

    隨著科技的進步,服務器處理器的性能在不斷攀升。其中,Intel的E5和I9系列處理器在業(yè)界具有廣泛的影響力。而當我們在選擇服務器的時候會有各種各樣的配置讓我們眼花繚亂不知道該怎么去選擇,下面我跟大家分享一下E5跟I9有什么區(qū)別,方便我們在選擇的時候有一個方向去

    2024年01月24日
    瀏覽(30)
  • 如何高效的學習接口自動化測試?從零開始學習接口自動化測試:選擇合適的學習資源和編程語言

    如何高效的學習接口自動化測試?從零開始學習接口自動化測試:選擇合適的學習資源和編程語言

    目錄 引言: 一、學習前的準備 二、選擇合適的學習資源 三、實踐中學習 四、總結(jié) 在日常的軟件開發(fā)過程中,接口自動化測試是一個非常重要的環(huán)節(jié)。接口自動化測試可以幫助我們快速準確地檢測出軟件中的缺陷,提高軟件的質(zhì)量和穩(wěn)定性。但是,要學習接口自動化測試并

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包