redis中用到這么多的緩存區(qū),有什么作用啊

redis中的緩沖區(qū)

  1. aof持久化:第一步執(zhí)行寫入命令坛善;第二步將寫命令寫到用戶空間的aof緩沖區(qū),后續(xù)將aof緩沖區(qū)的寫命令發(fā)送內(nèi)核空間的page cache。
  2. aof重寫:為了aof重寫期間數(shù)據(jù)保持一致性眠屎,客戶端寫入命令時(shí)剔交,不僅需要寫入到aof緩存區(qū),也需要寫入到一個(gè)aof重寫緩沖區(qū)改衩。在aof重寫完成后岖常,子進(jìn)程通過信號(hào)通知父進(jìn)程,父進(jìn)程收到信號(hào)后會(huì)將aof重寫緩存區(qū)中的數(shù)據(jù)追加到aof文件中葫督。
  3. 在主從架構(gòu)的中竭鞍,主節(jié)點(diǎn)往從節(jié)點(diǎn)同步數(shù)據(jù)時(shí),都會(huì)先講寫命令同步到主節(jié)點(diǎn)的replication buffer緩沖區(qū)中橄镜,然后異步返回,最后通過長(zhǎng)連接將緩存區(qū)中的數(shù)據(jù)發(fā)送到從節(jié)點(diǎn)偎快,主節(jié)點(diǎn)會(huì)給每個(gè)新連接的從節(jié)點(diǎn)分配一個(gè)replication buffer緩存區(qū)
  4. 在主從架構(gòu)中洽胶,主從節(jié)點(diǎn)是通過一個(gè)長(zhǎng)連接來發(fā)送寫數(shù)據(jù)來保持?jǐn)?shù)據(jù)一致性的晒夹,但是由于網(wǎng)絡(luò)的不可控性,該連接可能會(huì)中斷的姊氓,當(dāng)恢復(fù)之后從節(jié)點(diǎn)可能需要增量同步丐怯,也可能需要全量同步。
    決定哪種同步方式的因素是replication backup buffer緩存區(qū)翔横,該緩存區(qū)是一個(gè)環(huán)形結(jié)構(gòu)读跷,且有固定大小,整個(gè)集群中主節(jié)點(diǎn)只會(huì)維護(hù)一個(gè)replication backup buffer緩存區(qū)棕孙,且該緩存區(qū)內(nèi)記錄著所有消息的offet舔亭,該緩存區(qū)主要用于記錄主節(jié)點(diǎn)增量同步從節(jié)點(diǎn)的數(shù)據(jù),因?yàn)樵摥h(huán)型緩沖區(qū)是有大小的蟀俊,如果滿了話后面的同步的數(shù)據(jù)會(huì)覆蓋環(huán)內(nèi)的緩存钦铺。
    好了,知道了replication bakcup buffer緩沖區(qū)的使用場(chǎng)景后肢预,在來說它是怎么覺得使用增量同步還是全量同步的呢矛洞?
    當(dāng)從節(jié)點(diǎn)和主節(jié)點(diǎn)之間長(zhǎng)連接恢復(fù)后,從節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)發(fā)送當(dāng)前讀取最新的offset烫映,而主節(jié)點(diǎn)收到后會(huì)對(duì)比該offet和主節(jié)點(diǎn)最新寫入的offet的差值沼本,如果該差值范圍內(nèi)的所有offset在replication backup buffer緩沖區(qū)上,則將replication backup buffer緩沖區(qū)上對(duì)應(yīng)的offset發(fā)送到replication buffer緩存區(qū)上锭沟,即增量同步抽兆;否則進(jìn)行全量同步
    如果主節(jié)點(diǎn)的寫入速度大于從節(jié)點(diǎn)的讀取速度族淮,那么主節(jié)點(diǎn)上的replication backup buffer緩沖區(qū)就會(huì)被覆蓋辫红,如果此時(shí)主節(jié)點(diǎn)和從節(jié)點(diǎn)之間的長(zhǎng)連接斷開凭涂,恢復(fù)后將采用全量復(fù)制,所以replication backup buffer緩沖區(qū)的大小是很重要的贴妻。

在上面的持久化(寫入磁盤)或者 主從同步(網(wǎng)絡(luò)IO)中都可以看到很多緩沖區(qū)的字眼切油,那么有沒有想過一個(gè)問題為什么不直接寫入到磁盤或者是直接請(qǐng)求io呢?而需要先寫到緩沖區(qū)呢名惩?

  • 降低請(qǐng)求磁盤的頻率或者降低請(qǐng)求網(wǎng)絡(luò)IO的頻率:我們都知道磁盤和網(wǎng)絡(luò)IO都是非常慢的澎胡,那么如果使用緩存區(qū)的話,通趁漯模可以合并數(shù)據(jù)或者合并網(wǎng)絡(luò)IO攻谁,這樣明顯可以減少請(qǐng)求磁盤或者請(qǐng)求IO的次數(shù),可以提高性能底循。
  • 異步刷盤:寫入緩沖區(qū)中的數(shù)據(jù)不會(huì)立即同步到磁盤或者請(qǐng)求IO巢株,而是在某個(gè)時(shí)刻合并成一個(gè)更到的數(shù)據(jù)或者IO后才發(fā)生請(qǐng)求槐瑞。
    異步可以提高寫入性能熙涤,因?yàn)椴槐氐却總€(gè)寫命令或者都同步到磁盤或者響應(yīng)。這樣可以繼續(xù)處理新的IO或者新的請(qǐng)求困檩,而不受到磁盤或者網(wǎng)絡(luò)的阻塞祠挫。
  • 減少磁盤頁(yè)內(nèi)碎片化:將多個(gè)命令一次性寫入磁盤可以降低磁盤碎片的產(chǎn)生。頻繁地小規(guī)模寫入可能會(huì)導(dǎo)致文件碎片化悼沿,而一次性寫入可以減少這種情況等舔。如果磁盤頁(yè)大小為4K,寫入的數(shù)據(jù)小于4k時(shí)寫入占用一個(gè)磁盤頁(yè),這樣就會(huì)造成頁(yè)內(nèi)碎片化糟趾。

PAGE CACHE

上面談到了一個(gè)page cache,其實(shí)它是也是一個(gè)緩存區(qū)慌植,屬于內(nèi)核空間的緩存,叫做磁盤高速緩存區(qū)义郑,其作用和上面介紹的差不多

  • 合并IO:內(nèi)核的 I/O 調(diào)度算法會(huì)緩存盡可能多的 I/O 請(qǐng)求在 PageCache 中蝶柿,最后「合并」成一個(gè)更大的 I/O 請(qǐng)求再發(fā)給磁盤,這樣做是為了減少磁盤的尋址操作非驮;

磁盤的尋址操作是指在硬盤上找到并讀取或?qū)懭霐?shù)據(jù)的過程交汤。硬盤是由多個(gè)盤片(platters)組成的,每個(gè)盤片都被分成許多圓形的軌道(tracks)劫笙,而每個(gè)軌道又被劃分為許多扇區(qū)(sectors)芙扎。磁頭(read/write head)可以在盤片的表面上移動(dòng),而盤片則以高速旋轉(zhuǎn)填大。

磁盤尋址操作的主要步驟包括:

尋道(Seek): 磁頭從當(dāng)前位置移動(dòng)到目標(biāo)軌道上的正確位置戒洼,這個(gè)過程稱為尋道。尋道操作的時(shí)間開銷取決于磁頭的移動(dòng)速度允华。

旋轉(zhuǎn)(Rotational Delay): 等待目標(biāo)扇區(qū)旋轉(zhuǎn)到磁頭的正下方圈浇,這個(gè)過程稱為旋轉(zhuǎn)敷矫。旋轉(zhuǎn)操作的時(shí)間開銷取決于磁盤的旋轉(zhuǎn)速度。

傳送(Transfer): 一旦目標(biāo)扇區(qū)位于磁頭的正下方汉额,就可以進(jìn)行數(shù)據(jù)的讀取或?qū)懭搿?/p>

合并 I/O 操作有助于減少磁盤的尋址操作曹仗,主要原因如下:

減少尋道次數(shù): 將多個(gè)小的 I/O 請(qǐng)求合并成一個(gè)更大的請(qǐng)求,可以減少尋道次數(shù)蠕搜。由于尋道操作通常是相對(duì)較慢的怎茫,減少尋道次數(shù)可以顯著提高磁盤的讀寫效率。

最小化旋轉(zhuǎn)延遲: 合并 I/O 請(qǐng)求也有助于最小化旋轉(zhuǎn)延遲妓灌。如果多個(gè)請(qǐng)求都在同一軌道上轨蛤,它們可以更有效地等待目標(biāo)扇區(qū)旋轉(zhuǎn)到磁頭的正下方,減少了旋轉(zhuǎn)延遲虫埂。

提高吞吐量: 合并 I/O 請(qǐng)求可以提高磁盤的吞吐量祥山。通過將多個(gè)小的請(qǐng)求組合成一個(gè)大的請(qǐng)求,可以以更高的效率傳送數(shù)據(jù)掉伏,減少傳送的時(shí)間開銷缝呕。

總體而言,合并 I/O 操作通過減少尋道次數(shù)和最小化旋轉(zhuǎn)延遲斧散,提高了磁盤的讀寫效率供常,增加了吞吐量,從而減少了整體的磁盤尋址時(shí)間鸡捐。這對(duì)于提高系統(tǒng)性能和優(yōu)化磁盤 I/O 是非常有益的栈暇。

  • 預(yù)讀:內(nèi)核也會(huì)「預(yù)讀」后續(xù)的 I/O 請(qǐng)求放在 PageCache 中,一樣是為了減少對(duì)磁盤的操作箍镜;

看到這里可能會(huì)有疑問源祈,既然page cache,已經(jīng)有了合并IO,預(yù)讀色迂,異步刷盤的特點(diǎn)了香缺,為什么還需要再用戶空間在設(shè)立一層緩沖區(qū)呢?

內(nèi)核的PAGE CACHE是操作系統(tǒng)用來管理磁盤和內(nèi)存之間的緩存的脚草,而用戶空間的緩沖區(qū)則是由應(yīng)用程序自身維護(hù)的一種數(shù)據(jù)緩存赫悄。

  1. 控制緩存策略: 應(yīng)用程序可以更加精確地控制在何時(shí)將數(shù)據(jù)寫入磁盤。用戶空間緩沖區(qū)允許應(yīng)用程序決定何時(shí)將數(shù)據(jù)刷寫到磁盤馏慨,而不完全依賴于操作系統(tǒng)的異步刷盤機(jī)制埂淮。

  2. 自定義緩存邏輯: 應(yīng)用程序可以實(shí)現(xiàn)自己的緩存邏輯,例如實(shí)現(xiàn)LRU(Least Recently Used)或其他緩存淘汰策略写隶,以更好地滿足應(yīng)用程序的需求倔撞。

  3. 減少IO壓力: 用戶空間緩沖區(qū)可以允許應(yīng)用程序?qū)⒍鄠€(gè)小的寫操作合并為一個(gè)更大的寫操作,減少了對(duì)磁盤的隨機(jī)寫入慕趴,提高了IO的效率痪蝇。

  4. 提高應(yīng)用程序性能: 通過使用用戶空間緩沖區(qū)鄙陡,應(yīng)用程序可以更加主動(dòng)地管理自己的數(shù)據(jù),以適應(yīng)特定的應(yīng)用場(chǎng)景和性能需求躏啰。

雖然用戶空間的緩沖區(qū)需要更多的維護(hù)和管理趁矾,但它提供了更多的靈活性和控制權(quán),使應(yīng)用程序能夠更好地適應(yīng)特定的性能和需求给僵。在某些情況下毫捣,使用用戶空間的緩沖區(qū)可以提供更好的性能和定制化的緩存管理策略。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帝际,一起剝皮案震驚了整個(gè)濱河市蔓同,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹲诀,老刑警劉巖斑粱,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脯爪,居然都是意外死亡则北,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門披粟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咒锻,“玉大人,你說我怎么就攤上這事守屉。” “怎么了蒿辙?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵拇泛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我思灌,道長(zhǎng)俺叭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任泰偿,我火速辦了婚禮熄守,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耗跛。我一直安慰自己裕照,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布调塌。 她就那樣靜靜地躺著晋南,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羔砾。 梳的紋絲不亂的頭發(fā)上负间,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天偶妖,我揣著相機(jī)與錄音,去河邊找鬼政溃。 笑死趾访,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的董虱。 我是一名探鬼主播腹缩,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼空扎!你這毒婦竟也來了藏鹊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤转锈,失蹤者是張志新(化名)和其女友劉穎盘寡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撮慨,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竿痰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砌溺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影涉。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖规伐,靈堂內(nèi)的尸體忽然破棺而出蟹倾,到底是詐尸還是另有隱情,我是刑警寧澤猖闪,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布鲜棠,位于F島的核電站,受9級(jí)特大地震影響培慌,放射性物質(zhì)發(fā)生泄漏豁陆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一吵护、第九天 我趴在偏房一處隱蔽的房頂上張望盒音。 院中可真熱鬧,春花似錦馅而、人聲如沸祥诽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)原押。三九已至,卻和暖如春偎血,著一層夾襖步出監(jiān)牢的瞬間诸衔,已是汗流浹背盯漂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笨农,地道東北人就缆。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谒亦,于是被迫代替她去往敵國(guó)和親竭宰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 溫馨提示:本篇文章適合有一定基礎(chǔ)的童鞋哦 到底有多快? 我們可以先說到底有多快锁摔,根據(jù)官方數(shù)據(jù)廓旬,Redis 的 QP...
    坨坨的大數(shù)據(jù)閱讀 146評(píng)論 0 1
  • Redis持久化 Redis持久化的機(jī)制有兩種:RDB、AOF谐腰。 含義優(yōu)點(diǎn)缺點(diǎn)RDB對(duì)Redis中的數(shù)據(jù)執(zhí)行周期性...
    一生逍遙一生閱讀 225評(píng)論 0 0
  • Redis 為什么這么快十气? 很多人只知道是 K/V NoSQl 內(nèi)存數(shù)據(jù)庫(kù)励背,單線程……這都是沒有全面理解 Redi...
    小郭子閱讀 738評(píng)論 0 2
  • 又快到了金三銀四跳槽季叶眉,好多同學(xué)已經(jīng)開始行動(dòng)了。今天我來助力一把籍胯,送出這套 Redis 面試題竟闪,助力大家通關(guān)。 R...
    Java程序員石頭閱讀 670評(píng)論 0 1
  • Redis使用場(chǎng)景 String 計(jì)數(shù)器 (排行榜杖狼,閱讀量,瀏覽量等等)(incr decr) Web集群的ses...
    GGBond_8488閱讀 234評(píng)論 0 1