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