高并發(fā)下的各種緩存

前言

Cache在大家最開始接觸開發(fā)的時(shí)候應(yīng)該就聽過許多了页衙,比如瀏覽器緩存蓄氧、OS中的緩存函似、什么緩存一致性等等,各式各樣的Cache喉童,看起來各種高大上的樣子撇寞,看著群里或者某乎的大佬們在不斷的討論或者推緩存相關(guān)的blog。
近期對于緩存相關(guān)研究了不少堂氯,自己也在試著寫一個(gè)Cache中間件來研究下蔑担。過程中整理了一下,準(zhǔn)備做成一個(gè)系列文章發(fā)一下咽白,也希望大家給我多多指正啤握。
在正式開始開始寫緩存之前,當(dāng)然是先研究領(lǐng)域內(nèi)現(xiàn)有的一些Cache 相關(guān)的內(nèi)容晶框,作為一個(gè)引言排抬。
后續(xù)分別從OS 中的緩存、JVM中的緩存授段、Web 應(yīng)用中常見緩存蹲蒲、現(xiàn)有常作為獨(dú)立緩存的Redis/MemCache、InnoDB中的存儲引擎侵贵、瀏覽器中的緩存届搁、分布式緩存的實(shí)現(xiàn)案例 進(jìn)行對應(yīng)的淺析及相應(yīng)Cache設(shè)計(jì)主題的引入。下面先大體的介紹一下各個(gè)場景及實(shí)現(xiàn)方式,后續(xù)會(huì)獨(dú)立推送對應(yīng)的淺析文章咖祭。

Cache 于操作系統(tǒng)

Cache 最早的出現(xiàn)是在操作系統(tǒng)中,致力于解決速度的大幅度差異而效率低下 引出的一種概念蔫骂。
在早期操作系統(tǒng)中么翰,最核心的速度差異在于 CPU與主存 & 主存與磁盤 CPU與磁盤 之間的速度差異。往往硬件方面的限制因素會(huì)更多一些辽旋,比如說昂貴的寄存器浩嫌、相對昂貴的主存介質(zhì),CPU速度與主存讀取速度补胚、主存速度與磁盤IO的發(fā)展速度不均衡码耐,這些幾乎是一些無可奈何的客觀因素,盡管技術(shù)圈的大家一直在為此努力溶其。因?yàn)檫@些因素的限制骚腥,我們不得不想出一些策略來均衡一些短板的出現(xiàn),其中誕生了一些復(fù)用技術(shù)瓶逃、中斷束铭、虛擬內(nèi)存、緩存等均衡及提升計(jì)算機(jī)整體瓶頸與資源利用率的技術(shù)厢绝。
這里我們要說的是緩存契沫,從我們計(jì)算機(jī)的心臟CPU開始說起,CPU一直是速度領(lǐng)先于計(jì)算機(jī)其他組件的一個(gè)存在昔汉,算是第一數(shù)量級懈万,大家學(xué)過 計(jì)算機(jī)組成或者計(jì)算機(jī)系統(tǒng)的話應(yīng)該非常清楚,這里先不展開描述靶病,主存整體來說是第二數(shù)量級的存在会通,現(xiàn)階段磁盤大多為仍為機(jī)械結(jié)構(gòu)更是慢的驚人,即使是SSD雖然對于普通機(jī)械磁盤來說速度上快一點(diǎn)但是仍然不足嫡秕,之間的差異算是鴻溝渴语。
為實(shí)現(xiàn)速度的均衡也就是讓主存能夠不太拖CPU的后腿,磁盤不拖CPU及主存的后腿誕生了由 寄存器 -> 高速緩存 -> 主存 -> 磁盤 這樣的一種結(jié)構(gòu)昆咽,正在使用的數(shù)據(jù)通常是存在于寄存器中的驾凶,最近高頻使用的數(shù)據(jù)是存在于高速緩存中,最近可能會(huì)使用的高頻數(shù)據(jù)是存放在主存中的掷酗,這種描述雖然不太準(zhǔn)確调违,但是更容易讓大家感受緩存的設(shè)計(jì)思路。根據(jù)數(shù)據(jù)的使用頻次及對應(yīng)材質(zhì)的速度差異進(jìn)行分析 做到物盡其用泻轰,發(fā)揮各自的優(yōu)勢技肩,比如速度快或者低廉的價(jià)格,使計(jì)算機(jī)能夠以更低的價(jià)格發(fā)揮出更高的性能。
其中提到的如何分析材質(zhì)及數(shù)據(jù)的使用頻次就引出了對應(yīng)Cache的設(shè)計(jì)思想及對應(yīng)解決的問題虚婿。
比如說

設(shè)備:

磁盤對應(yīng)的是最廉價(jià)的設(shè)備旋奢,可以以非常低的價(jià)格來存儲更多數(shù)據(jù)。主存相對來說要貴一些然痊,但是速度上已經(jīng)有了質(zhì)的提升至朗,CPU中的寄存器幾乎與CPU速度一致但是價(jià)格非常昂貴。

數(shù)據(jù):

數(shù)據(jù)的使用頻次差異性非常強(qiáng)剧浸,比如說我們操作系統(tǒng)所需的程序代碼锹引,這幾乎是高頻使用的,而我們的計(jì)算機(jī)上的用戶應(yīng)用 使用頻次算是中等唆香,用戶應(yīng)用所需要的數(shù)據(jù)頻次就會(huì)更低一些嫌变,我們存儲在磁盤上的文本圖像等使用頻率更低。
現(xiàn)在我們就可以讓速度最快最昂貴容量最小的寄存器來儲存最近需要執(zhí)行的指令躬它,讓高速緩存存儲正在執(zhí)行的所需的指令集腾啥,讓主存來存儲我們最近可能需要運(yùn)行的程序及數(shù)據(jù),讓能迅速尋址的那部分磁盤來存儲稍低頻次所使用的數(shù)據(jù)冯吓,讓磁盤其他部分來存儲那些需要保存但是幾乎不常使用的數(shù)據(jù)碑宴。這樣CPU與內(nèi)存、CPU與磁盤桑谍、主存與磁盤之間的速度差異在運(yùn)行過程中就不再那么的明顯延柠,我們要做的只是在恰當(dāng)?shù)臅r(shí)機(jī)完成不同介質(zhì)之間的數(shù)據(jù)交換,讓快的設(shè)備去訪問速度稍次的設(shè)備锣披。
這算是Cache大體的實(shí)現(xiàn)思想或者說思路贞间,其中所謂的頻次、材質(zhì)只是舉例雹仿,在現(xiàn)實(shí)問題中可能是CPU與磁盤增热,也可能是也可能是不同的服務(wù)器站點(diǎn),也可能是發(fā)消息方與接受方處理速度的差異胧辽,我們需要針對具體的問題進(jìn)行對應(yīng)的抽象峻仇,本質(zhì)來說就是速度上的差異。
例子中提到了不同介質(zhì)之間數(shù)據(jù)的交換來保證能夠相鄰訪問(緩存命中率問題)邑商,這就引出了Cache所要解決的幾個(gè)核心問題及Cache對應(yīng)的實(shí)現(xiàn)摄咆。
1、如何判斷速度的頻次人断?(是否為熱點(diǎn)數(shù)據(jù))
2吭从、何時(shí)把熱點(diǎn)數(shù)據(jù)放入緩存中?
3恶迈、熱點(diǎn)數(shù)據(jù)應(yīng)該放在哪一部分涩金?
4、應(yīng)該把哪個(gè)數(shù)據(jù)移走?(數(shù)據(jù)的淘汰策略)
5步做、移走的數(shù)據(jù)應(yīng)該存放于何處副渴?(數(shù)據(jù)的降級問題)
在我們的操作系統(tǒng)中已經(jīng)完成了對應(yīng)的策略,具體的實(shí)現(xiàn)會(huì)在《淺析 操作系統(tǒng)中的緩存》中闡述~
這里僅僅是大體描述一下及對應(yīng)的背景及應(yīng)用介紹全度。

Cache 于JVM

這里要說的是JVM中緩存抽象思想的使用佳晶,緩存最主要的解決速度差異的問題以提升整體效率,在JVM中也是這樣的讼载。
Java 是一種解釋型語言,其實(shí)這個(gè)話不能說的如此絕對中跌,自動(dòng)JIT出現(xiàn)之后咨堤,Java 中的絕大部分熱點(diǎn)代碼是編譯為機(jī)器碼放在緩存區(qū)中的。這其實(shí)就是一種緩存思想的使用漩符。
最初Class 文件是存放于磁盤或者從網(wǎng)絡(luò)中獲取的一喘,頻次較低。
當(dāng)我們需要使用一部分代碼從磁盤或者網(wǎng)絡(luò)中加載并且解析鏈入內(nèi)存嗜暴,以供我們快速的使用凸克,頻次偏高。而一個(gè)文件完全不使用后又會(huì)被清楚內(nèi)存闷沥,詳見class的清理萎战。
當(dāng)工程中某一部分代碼已經(jīng)被鑒定為高頻使用時(shí),這一塊代碼將會(huì)直接被編譯為機(jī)器碼為下次直接使用而不是再次解釋做準(zhǔn)備舆逃,頻次最高蚂维。
而這三種方式的速度也是依次提升的。使用頻次的最高的以最快的方式使用路狮。
而對應(yīng)的什么樣的代碼應(yīng)該被緩存虫啥,這就取決于JIT的熱點(diǎn)代碼判斷策略。并且這里存在一個(gè)很經(jīng)典的現(xiàn)實(shí)問題奄妨,叫做jvm的代碼緩存耗盡導(dǎo)致性能下降涂籽。
以上問題的解釋后續(xù)會(huì)詳細(xì)的給出。
篇幅太長········
Cache 于Web 應(yīng)用砸抛、Cache 于Redis/MemCache评雌、Cache 與InnoDB 存儲引擎、Cache 于瀏覽器直焙、Cache 于分布式系統(tǒng)
這幾個(gè)就先不詳細(xì)介紹了柳骄,不小心寫的有點(diǎn)長。后續(xù)單獨(dú)推送~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箕般,一起剝皮案震驚了整個(gè)濱河市耐薯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖曲初,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件体谒,死亡現(xiàn)場離奇詭異,居然都是意外死亡臼婆,警方通過查閱死者的電腦和手機(jī)抒痒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颁褂,“玉大人故响,你說我怎么就攤上這事“涠溃” “怎么了彩届?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長誓酒。 經(jīng)常有香客問我樟蠕,道長,這世上最難降的妖魔是什么靠柑? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任寨辩,我火速辦了婚禮,結(jié)果婚禮上歼冰,老公的妹妹穿的比我還像新娘靡狞。我一直安慰自己,他們只是感情好隔嫡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布耍攘。 她就那樣靜靜地躺著,像睡著了一般畔勤。 火紅的嫁衣襯著肌膚如雪蕾各。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天庆揪,我揣著相機(jī)與錄音式曲,去河邊找鬼。 笑死缸榛,一個(gè)胖子當(dāng)著我的面吹牛吝羞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播内颗,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼钧排,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了均澳?” 一聲冷哼從身側(cè)響起恨溜,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤符衔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糟袁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體判族,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年项戴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了形帮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡周叮,死狀恐怖辩撑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仿耽,我是刑警寧澤合冀,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站氓仲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏得糜。R本人自食惡果不足惜敬扛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朝抖。 院中可真熱鬧啥箭,春花似錦、人聲如沸治宣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侮邀。三九已至坏怪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绊茧,已是汗流浹背铝宵。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留华畏,地道東北人鹏秋。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像亡笑,于是被迫代替她去往敵國和親侣夷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • cache在計(jì)算機(jī)組織結(jié)構(gòu)中很重要仑乌,理解cache對編寫性能友好的程序很有幫助百拓。 1. Cache的歷史 在科研領(lǐng)...
    古劍誅仙閱讀 1,574評論 0 0
  • 今天看到一位朋友寫的mysql筆記總結(jié)琴锭,覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下耐版,供大家參考下祠够,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,734評論 0 30
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,103評論 1 32
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,855評論 0 5
  • 理論總結(jié) 它要解決什么樣的問題粪牲? 數(shù)據(jù)的訪問古瓤、存取、計(jì)算太慢腺阳、太不穩(wěn)定落君、太消耗資源,同時(shí)亭引,這樣的操作存在重復(fù)性绎速。因...
    jiangmo閱讀 2,853評論 0 11