摘要:緩存算法我是,我會統計每一個緩存數據的使用頻率,我會把使用最少的緩存替換出緩存區。瀏覽器就是使用了我作為緩存算法。在緩存系統中找出最少最近的對象是需要較高的時空成本。再來一次機會的緩存算法,是對的優化。直到新的緩存對象被放入。
緩存 什么是緩存?
存貯數據(使用頻繁的數據)的臨時地方,因為取原始數據的代價太大了,所以我可以取得快一些。
Cache hit & Cache miss 的定義理解
Cache miss之后怎么辦?如果緩存區還有空間,可以把該次請求的數據存到緩存區
如果緩存慢了,又沒有命中緩存,那么建立替換算法,將緩存區中的outdated的數據替換掉
存儲成本當緩存沒有數據,我們從數據庫中取得數據,存到緩存的時空成本。
索引成本為緩存構建索引的時空成本。
緩存算法 Least Frequently Used (LFU)我是LFU,我會統計每一個緩存數據的使用頻率,我會把使用最少的緩存替換出緩存區。
Least Recently Used (LRU)我會把最近最少使用的緩存數據踢走。
瀏覽器就是使用了我(LRU)作為緩存算法。新的對象會被放在緩存的頂部,當緩存達到了容量極限,我會把底部的對象踢走,而技巧就是:我會把最新被訪問的緩存對象,放到緩存池的頂部。
所以,經常被讀取的緩存對象就會一直呆在緩存池中。有兩種方法可以實現我,array 或者是 linked list。
LRU2和2Q是我的兄弟,他們是為了完善我而存在的。
Least Recently Used 2我會把訪問過兩次的對象放進緩存區。
因為需要跟蹤訪問對象2次,所以隨著數據量增多,訪問負載和存儲成本都會變多。
2 Queues (2Q)我會把訪問到的對象存到LRU中,如果這個對象被再次訪問,那么把他放到第二個,更大的LRU中。
我踢走緩存對象是保持第一個緩存池是第二個緩存池的1/3.
當緩存的訪問負載是固定的時候,把LRU換成LRU2,會比增加LRU的容量更好。
我的性能比前兩者更出色,并且我是adoptive to access模式。
Adaptive Replacement Cache我由兩個LRU組成。
第一個L1, 包含的是最近只被使用過一次的。
第二個L2, 包含的是使用過兩次的對象。
我能夠自調,并且是低負載的。我也保存著歷史對象,這樣,我就可以記住那些被移除的對象,同時,也讓我可以看到被移除的對象是否可以留下,取而代之的是踢走別的對象。
Most Recently Used (MRU)MRU是和LRU相對立的,MRU會移除最近最多使用的對象。why?
在緩存系統中找出最少最近的對象是需要較高的時空成本。
MRU是:每當有一次請求,就會把這個訪問的對象放到棧頂,當棧滿了,我就會用新請求的對象來替換棧頂的對象。
FIFO低負載,低效管理的方法。
Second Chance再來一次機會的緩存算法,是對FIFO的優化。
SC跟FIFO一樣,在隊首觀察元素,進行踢出。
不同的是,SC對每一個對象都多了一個標志位,每次新加入隊列的對象,標志位都為1。如果在隊首要踢出該元素,則把他的標志位置0,重新加入隊列,相當于給他第二次機會。如果該踢出元素的標志位是0,則直接將他踢出。
CLockCLock是一個更好的環形FIFO。
Clock的頭部指針指向隊列中最老的對象。當緩存miss發生,同時沒有存儲空間時,我會首先檢查指針指向的對象的標志位的狀態,再決定操作,如果標志是0,我會直接用新數據替換這個老對象;如果標志是1,則會指針向前走一步,同時重復上一個步驟。直到新的緩存對象被放入。
Simple time-based我會對新增的對象加以保存周期,同時去掉周期失效的對象。
參考
http://www.kuqin.com/shuoit/20160201/350...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61780.html
摘要:根據資源的分類的資源分類主要分為兩大類主資源和派生資源。此時的數據時緩存到內存中的,當進程后,也就是瀏覽器關閉以后,數據將不存在。信息最大作用就是用于判斷服務器上該的內容是否被修改。附上我的學習筆記。 根據webkit資源的分類 webkit的資源分類主要分為兩大類:主資源和派生資源。 主資源:比如HTML頁面,或者下載項,對應代碼中的類是MainResourceLoader。 派生...
摘要:輸出緩存,在請求一個的過程中,實際上經過三個緩存程序緩存緩存瀏覽器緩存緩存的幾個重要規則在服務中,如果我們開啟了緩存,則數據首先放入到中如何開啟有兩個方法在配置這里去掉號即可在頁面中使用通過打開的,則作用于所有的頁面,使用打開則只作用于 output_buffering(ob,輸出緩存), 在請求一個PHP的過程中,實際上經過三個緩存:1. 程序緩存2 ob緩存 3. 瀏覽器緩存. ...
摘要:前言今天的筆記來了解一下原子操作以及中如何實現原子操作。概念原子本意是不能被進一步分割的最小粒子,而原子操作意為不可被中斷的一個或一系列操作。處理器實現原子操作處理器會保證基本內存操作的原子性。 showImg(https://segmentfault.com/img/bVVIRA?w=1242&h=536); 前言 今天的筆記來了解一下原子操作以及Java中如何實現原子操作。 概念 ...
摘要:協商緩存從緩存數據庫中取出緩存的標識,然后向瀏覽器發送請求驗證請求的數據是否已經更新,如果已更新則返回新的數據,若未更新則使用緩存數據庫中的緩存數據。 1.CSS的盒子模型 包含元素內容content、內邊距padding、邊框border、外邊距marginbox-sizing:border-box;content-box;inherit;1) content-box:總寬度=mar...
閱讀 1624·2021-11-22 13:53
閱讀 2856·2021-11-15 18:10
閱讀 2762·2021-09-23 11:21
閱讀 2506·2019-08-30 15:55
閱讀 482·2019-08-30 13:02
閱讀 757·2019-08-29 17:22
閱讀 1667·2019-08-29 13:56
閱讀 3458·2019-08-29 11:31