手機版WPS 手機版wps免費下載
2022-11-29
更新時間:2022-04-17 13:56:30作者:佚名
緩存是捕獲應(yīng)用程序和數(shù)據(jù)存儲位置之間交互的高效且簡單的方法。為了有效地實現(xiàn)這一點,您需要了解緩存的各種實現(xiàn)及其對應(yīng)用程序的影響。在本文中,我們將重點討論數(shù)據(jù)緩存的各種使用場景,而不討論技術(shù)實現(xiàn)的細(xì)節(jié)。
Java開發(fā)中存在兩種類型的緩存:本地緩存和群集緩存。
本地緩存
優(yōu)點:
數(shù)據(jù)直接來自Java虛擬機(JVM)、訪問速度非???、使用非常低的門檻、諸如ehcache,oscache和abd番石榴高速緩存等完善的插件在市場上很容易獲得。(ehcache和oscache已經(jīng)提供了群集緩存。)
缺點:
服務(wù)器集群中的不同機器之間可能會出現(xiàn)不一致和不一致的問題。當(dāng)本地緩存過大時,很容易觸發(fā)服務(wù)器的垃圾收集(GC)
集群緩存
優(yōu)點:
數(shù)據(jù)一致性得到保證,容量擴展方便,透明,對用戶不可感知。它使用了更多成熟的中間件工具,如Tair,Redis和Memcached。
缺點:
您需要選擇成熟的,遵從業(yè)務(wù)的集群緩存中間件和集群框架來建立和維護一組緩存集群服務(wù)器使用門檻高,可能會出現(xiàn)緩存熱點問題,如Tair熱點問題。
緩存使用方法
緩存使用情況因不同的數(shù)據(jù)大小和方案而異。存在三種使用方法,如下所示:
被動緩存處理:在這種方法中,如果查詢到達(dá)記錄,結(jié)果將立即返回。如果查詢未找到記錄,則查詢底層緩存的結(jié)果集并將結(jié)果返回給用戶完整數(shù)據(jù)高速緩存預(yù)熱或關(guān)鍵數(shù)據(jù)高速緩存預(yù)熱:在此方法中,結(jié)果已經(jīng)可用,并且針對數(shù)據(jù)源運行查詢。結(jié)果從緩存中檢索,不需要重新計算Sentinel緩存的實現(xiàn): Sentinel緩存使用多個集成層來檢索數(shù)據(jù)被動緩存處理是最簡單的實現(xiàn),適用于數(shù)據(jù)量較小的場景。完整的數(shù)據(jù)緩存加熱需要良好的設(shè)計,適合中等數(shù)據(jù)大小的熱點訪問方案。哨兵緩存集成了各種層次,但全面的應(yīng)用涉及復(fù)雜的技術(shù)。
本地緩存瓶頸
使用本地緩存或群集緩存的決定不會限制緩存使用方法。雖然擴展是可用的,但本文不關(guān)注集群高速緩存實現(xiàn),而是關(guān)于本地高速緩存使用情況的瓶頸。在大多數(shù)情況下,JVM的本地緩存是指堆內(nèi)存。
阿里云的標(biāo)準(zhǔn)應(yīng)用服務(wù)器的典型配置由8GB內(nèi)存的獨立虛擬4核CPU組成。這個配置在兩部分之間分配8GB:JVM和服務(wù)器的每日開銷。JVM內(nèi)存由以下部分組成:
年輕一代2GB,老一代2GB,堆內(nèi)存最大1GB
幾百兆字節(jié)的持久代PermSize
年輕一代的記憶力按照10:1:1的比例細(xì)分為Eden,so1和so2,每個記憶大約有170MB。
你可能會想,這樣一個分部有什么意義呢?如果我們向年輕一代分配3GB,會發(fā)生什么?如果我們調(diào)整年輕一代的分配大小,或者改變細(xì)分比例,會發(fā)生什么?
Java開發(fā)和C開發(fā)之間最大的區(qū)別之一是Java開發(fā)人員避免使用由JVM的垃圾收集機制動態(tài)管理的內(nèi)存應(yīng)用程序和發(fā)行版。當(dāng)JVM堆內(nèi)存使用率達(dá)到一定比例時,將觸發(fā)“世界停止”(STW)GC。JVM的GC對于應(yīng)用程序是不可感知的。當(dāng)用戶請求數(shù)據(jù)并且查詢到達(dá)緩存中的記錄,但GC在JVM中激活時,整個應(yīng)用程序?qū)鼋Y(jié),應(yīng)用程序保存用戶的請求,直到GC完成。GC不能超過請求的最大超時值。
這是JVM堆對本地緩存使用的第一個影響。有人建議我們可以通過增加JVM堆大小來擴展GC周期。但是,我們也必須考慮在本地內(nèi)存中分配給JVM年輕代的內(nèi)存大小的比例的影響。