xcache本地快取的設計(二)

2021-05-04 16:58:28 字數 1384 閱讀 7321

四、 退出策略

乙個快取,它所存放的元素不可能無限制的增長,xcache限制了快取元素的數量。如果放入快取元素時,快取已經滿了,那我們將採用一定的策略從現有的快取中選出乙個快取元素退出,再將新的快取元素放入。現在支援三種策略,fifo(先進先出),lfu(最不經常使用),lru(最近最久未使用)。見下圖。

outpolicyfactory:退出策略工廠,它負責生產不同的退出策略,供快取在滿的時候使用。

outpolicy:退出策略介面,它定義了乙個選舉方法,選乙個元素退出。見下**。

abstractoutpolicy:抽象退出策略,它實現了選舉方法,定義了乙個比較抽象方法讓子類實現。見下**。

在vote方法中,我們看到先從儲存器所有元素中選出幾個候選人,再從候選人中選出乙個元素。

如果儲存器中元素很多,考慮到效率,不可能乙個乙個比較,所以選幾個候選人比較合理。如果大於0個元素,小於10000個元素,最多10個候選人;如果大於10000個元素,最多100個候選人。

雖然儲存器中元素是沒有規則排列,可以隨機取出一定數量的候選人;但為了體現公平原則,這裡採用了分段隨機抽取。如果有8002個元素,候選人有10個,間隔為800。見下座標。

0----800----1600----2400----3200----4000----4800--------8000---8002

在每個間隔區間內,隨機抽取1個候選人。

fifopolicy:實現了先進先出策略。見下**。

lfupolicy:實現了最不經常使用策略。見下**。

lrupolicy:實現了最近最久未使用策略。見下**。

在實現各策略中,元素的統計資訊派上了用場。

五、 快取配置

為了靈活使用快取,肯定要支援配置的,cachefactory要根據配置生產一套定製的快取。xcache暫支援properties檔案的配置方式。見下示例xcache.properties。

xcache.caches:定義了快取的名稱,多個快取之間用逗號分隔。

cacheconfig.快取名.maxamount:快取最大元素數量,預設10000。

cacheconfig.快取名.deleteexpireelementdelay:刪除過期快取元素延遲,單位毫秒。快取初始化後,延遲一定時間後執行刪除過期快取元素。

cacheconfig.快取名.logcachestatdelay:記錄快取統計資訊延遲,單位毫秒。快取初始化後,延遲一定時間後執行記錄快取統計資訊。

cacheconfig.快取名.storemedia:儲存媒介(列舉:memory),預設記憶體。

cacheconfig.快取名.outpolicytype:退出策略型別(列舉:fifo、lfu、lru)。

六、 結語

xcache本地快取的設計(一)

一 儲存器 需要快取的物件是放在儲存器中的,最常用就是把這些物件放在記憶體中。儲存器是快取的基礎,xcache現在支援記憶體,未來可能支援更多的儲存媒介。在這部分設計中,採用乙個儲存器工廠,根據不同的儲存媒介生產不同的儲存器實現。見下圖。storefactory 儲存器工廠,它負責生產不同的儲存器實...

走進快取的世界(二) 快取設計

主要考慮三個問題 系統優化時有一句話必須切記 優化無止境 所以如果快取不是必須的,請果斷去掉,要知道越是業務上覆雜的系統,對cache的使用反而越簡單,因為對於乙個複雜 多變 歷史悠久的系統,在cache方面做過度設計會讓人深陷其中 快取的資料越多,系統的維護成本就越高,所以找準需要快取的點尤為重要...

本地快取設計思想與注意事項

之前在寫mybatis文章時介紹過關於一級快取和二級快取的設計,本文通過結合mybatis設計的思想以及其他框架的設計,來介紹一下關於本地快取的設計方案和注意事項。本地記憶體資源非常寶貴,要合理利用,一般那些經常被訪問的,但是又不經常被修改的資料,即讀多寫少的資料,比如字典 標籤 定期更新的統計資料...