<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最受歡迎的內(nèi)存數(shù)據(jù)庫(kù)!

          共 5610字,需瀏覽 12分鐘

           ·

          2024-08-16 14:17

          作為當(dāng)今廣受歡迎的內(nèi)存數(shù)據(jù)庫(kù),Redis以其卓越的性能和廣泛的應(yīng)用場(chǎng)景著稱。

          掌握Redis技術(shù)幾乎成為每位開發(fā)人員、測(cè)試人員和運(yùn)維人員的看家本領(lǐng)!

          微信公眾號(hào)「碼哥跳動(dòng)」(原「碼哥字節(jié)」,后改名為「碼哥跳動(dòng)」)主理人碼哥持續(xù)輸出的Redis技術(shù)相關(guān)文章受到廣大讀者的喜愛,不少小伙伴都從中受益!

          在大家的持續(xù)催更下,碼哥的這本《Redis高手心法》終于和大家見面了!

          作者將復(fù)雜的概念與實(shí)際案例相結(jié)合,以簡(jiǎn)潔、詼諧、幽默的方式揭示了Redis的精髓。

          本書不僅是學(xué)習(xí) Redis 的必備指南,更是駕馭 Redis 強(qiáng)大功能的秘籍。

          無論你是初學(xué)者還是經(jīng)驗(yàn)豐富的開發(fā)者,都會(huì)在閱讀本書的過程中得到啟發(fā)與收獲。

          如果你希望站在Redis的頂峰,那么《Redis高手心法》絕對(duì)是你不可或缺的利器!

          千古無同局,葉底能否藏花,我們未來印證,愿此心法能讓你學(xué)有所成!

          下面就讓碼哥帶我們一探本書的究竟,提前領(lǐng)略一下其中精彩紛呈的內(nèi)容吧~~



          文/碼哥

          1打磨只為呈現(xiàn)完美的作品

          Chaya:碼哥,Redis 這么快,你咋就這么慢呢?從戀愛到生娃都沒你這么久。

          寫書的難度可比寫公眾號(hào)文章大多了。公眾號(hào)的文章,可能有一些錯(cuò)別字,也有可能存在語病。

          編寫書的話,要求嚴(yán)格多了,語言要精準(zhǔn)正確,不能存在錯(cuò)別字和語病,內(nèi)容需要循序漸進(jìn)有層次感,還要經(jīng)過出版社老師的多次審核、校正,每一段話和文字都是我們精心「雕刻」的成果。

          此外,我經(jīng)過多年對(duì) Redis 的深耕,花了很多時(shí)間重新梳理了 Redis 技術(shù)架構(gòu),加入了 Redis 6.0 ~ 7.0 版本的各種全新特性,從更深層次的角度挖掘底層實(shí)現(xiàn)原理,并盡量用風(fēng)趣幽默的語言和 158 張圖片解釋難懂的技術(shù)點(diǎn)

          作為后端開發(fā)者的我深刻知道,學(xué)習(xí)是一件比較難的事情,所以我就想著站在開發(fā)者的角度,用擬人化、場(chǎng)景化詼諧幽默的言語,再加撩人心弦又準(zhǔn)確圖片讓讀者輕松愉快地學(xué)習(xí) Redis 實(shí)現(xiàn)原理和開發(fā)實(shí)戰(zhàn)技巧。

          總之一句話,每一個(gè)章節(jié)都經(jīng)過反復(fù)推敲,只為呈現(xiàn)出最精彩的內(nèi)容給你們。在我花費(fèi)了大量精力更系統(tǒng)更全面地規(guī)劃,以及出版社老師不斷編排打磨,《Redis 高手心法》紙質(zhì)書成為了去繁存簡(jiǎn),精益求精的作品,就好像從鋼鐵俠戰(zhàn)甲馬克1 號(hào),進(jìn)化到成功拿下滅霸一血的馬克 85 戰(zhàn)甲。

          Chaya:網(wǎng)絡(luò)資料很多,但碎片化嚴(yán)重,如何才能成為 Redis 高手,建立完整的知識(shí)框架?

          本書基于 Redis 7.0 版本的源碼來講解,并建立了一個(gè)完整的 Redis 知識(shí)框架,從全局視角整理 Redis 知識(shí)體系,結(jié)合難點(diǎn)給出158 張圖片,希望能讓你們更容易理解。

          對(duì)于一門技術(shù),如果只接觸了零散的技術(shù)點(diǎn),沒有在腦海里建立?個(gè)完整的知識(shí)框架和架構(gòu)體系,沒有系統(tǒng)觀,就會(huì)很吃力,而且會(huì)出現(xiàn)一看好像會(huì),過后就忘記,?臉懵逼的情況。

          我會(huì)引導(dǎo)大家從全局出發(fā),帶著問題去尋找答案,嘗試輸出對(duì)一個(gè)技術(shù)點(diǎn)的思考和理解。

          ?起搭建?套完整的知識(shí)框架, 學(xué)會(huì)從全局視角整理整個(gè)知識(shí)體系

          2欲練此功不必自宮只需放松

          本書的特點(diǎn)是 Redis 化身成人,將復(fù)雜的概念與實(shí)際案例相結(jié)合,以簡(jiǎn)潔詼諧幽默的方式,為你揭示 Redis 的精髓

          從 Redis 作為第一人稱視角出發(fā),以擬人故事化的方式和詼諧幽默的語言與各路“神仙”對(duì)話,配合 158 張圖片,由淺入深循序漸進(jìn)地講解 Redis的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)原理。

          現(xiàn)在新書上市,優(yōu)惠力度特別大,原價(jià) 100,現(xiàn)在 5 折優(yōu)惠,只需要 50 靈石,推薦大家趁著這個(gè)機(jī)會(huì),趕緊沖一波,拍下《Redis 高手心法》 秘籍,早日修煉天階斗技。


          由于篇幅有限,接下來我從書中摘取少量內(nèi)容,給大家感受下文字和圖片的溫度......


          2.1底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)原理

          天下武功,無堅(jiān)不摧,唯快不破!我的名字叫 Redis,全稱是 Remote Dictionary Server。

          Chaya:我知道你支持很多種數(shù)據(jù)類型,對(duì)于不同的數(shù)據(jù)類型,底層應(yīng)該用了多種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)存儲(chǔ)吧?

          Chaya 小姐姐很聰明,我給開發(fā)者提供了 String(字符串)、Hashes(散列表)、Lists(列表)、Sets(無序集合)、SortedSets(可根據(jù)范圍查詢的排序集合)、Bitmap(位圖)、HyperLogLog、Geospatial(地理空間)和 Stream(流)等數(shù)據(jù)類型。

          為了在速度和內(nèi)存占用之間找到最優(yōu)解,我設(shè)計(jì)了多種數(shù)據(jù)結(jié)構(gòu)。總之為了實(shí)現(xiàn)多快好省(支持?jǐn)?shù)據(jù)類型多、速度快、好用、節(jié)省內(nèi)存)。

          MySQL:“就拿 Sting 類型來舉例吧,C 語言本就有字符串,為嘛還自己搞了一套字符串類型,嚇唬誰呢?!”

          格局能不能打開一點(diǎn)兒,我并沒有直接使用 C 語言的字符串,而是自己搞了一個(gè) SDS 的結(jié)構(gòu)體來表示字符串。

          為了支持豐富和高性能的字符串操作函數(shù)、保存二進(jìn)制格式數(shù)據(jù)、節(jié)省內(nèi)存,以及實(shí)現(xiàn)“既 要又要還要”的目標(biāo)。

          SDS 中的 len 字段保存了字符串的長(zhǎng)度,實(shí)現(xiàn)了 O(1) 時(shí)間復(fù)雜度獲取字符串長(zhǎng)度。

          SDS 結(jié)構(gòu)有一個(gè) flags 字段,表示的是 SDS 類型。實(shí)際上 SDS 一共設(shè)計(jì)了 5 種類型,分別是 sdshdr5、sdshdr8、sdshdr16、sdshdr32 和 sdshdr64,區(qū)別在于數(shù)組的len 長(zhǎng)度和分配空間長(zhǎng)度 alloc 不同。

          struct __attribute__ ((__packed__)) sdshdr8 {
             uint8_t len;
             uint8_t alloc;
             unsigned char flags;
             char buf[];
          };

          節(jié)省內(nèi)存

          之所以這么設(shè)計(jì),是因?yàn)槭褂貌煌?SDS 類型保存不同大小的字符串可以節(jié)省內(nèi)存。

          二進(jìn)制格式數(shù)據(jù)安全

          SDS 不僅可以存儲(chǔ)字符串類型數(shù)據(jù),還能存儲(chǔ)二進(jìn)制格式數(shù)據(jù)。SDS 并不是通過“\0” 來判斷字符串結(jié)束的,而是采用 len 標(biāo)志結(jié)束,所以可以直接存儲(chǔ)二進(jìn)制格式數(shù)據(jù)。

          編碼格式

          我還對(duì)字符串類型的數(shù)據(jù)采用了三種編碼格式來存儲(chǔ),分別是 int、embstr 和 raw,你可使 用 OBJECT encoding key來查找對(duì)象所使用的編碼類型。

          空間預(yù)分配

          當(dāng)對(duì) SDS 進(jìn)行縮短操作時(shí),程序并不會(huì)回收多余的內(nèi)存空間,如果后面需要 append 追 加操作,則直接使用 buf 數(shù)組 alloc -len 中未使用的空間。

          通過惰性空間釋放策略,避免了減小字符串所需的內(nèi)存重新分配操作。

          篇幅有限,更多的底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)原理詳見《Redis 高手心法》,不再一一列舉......


          2.2RDB 與 AOF

          Chaya:Redis 數(shù)據(jù)保存在內(nèi)存,如果沒有持久化,一旦斷電或者宕機(jī),保存在內(nèi)存中的數(shù)據(jù)將全部丟失,咋辦呢?

          我有兩大撒手锏,可以實(shí)現(xiàn)數(shù)據(jù)持久化,做到宕機(jī)快速恢復(fù),“不丟數(shù)據(jù)穩(wěn)如山”,無須從數(shù)據(jù)庫(kù)中慢慢恢復(fù)數(shù)據(jù)。它們就是 RDB 快照和 AOF(Append Only File)。

          MySQL:“在實(shí)際生產(chǎn)環(huán)境中,程序員通常會(huì)給你配置 6GB 的內(nèi)存,將這么大的內(nèi)存數(shù)據(jù)生成 RDB 快照文件落到磁盤的過程會(huì)持續(xù)比較長(zhǎng)的時(shí)間。你如何做到在繼續(xù)處理寫命令請(qǐng)求的同時(shí)保證 RDB 與內(nèi)存中的數(shù)據(jù)一致呢?”

          作為唯快不破的 NoSQL 數(shù)據(jù)庫(kù)扛把子,我在對(duì)內(nèi)存數(shù)據(jù)做快照時(shí),并不會(huì)暫停寫操作(讀操作不會(huì)造成數(shù)據(jù)的不一致)。

          我使用了操作系統(tǒng)的多進(jìn)程寫時(shí)復(fù)制技術(shù)(Copy On Write ,COW)來實(shí)現(xiàn)快照持久化。

          Chaya:“隨著寫入操作持續(xù)執(zhí)行,AOF 日志過大怎么辦?文件越大,數(shù)據(jù)恢復(fù)就越慢。”

          為了解決 AOF 文件體積膨脹的問題,創(chuàng)造我的 Antirez 老哥設(shè)計(jì)了 AOF 重寫機(jī)制(AOF Rewrite),對(duì)文件進(jìn)行瘦身。

          每次 AOF 重寫時(shí),Redis 都會(huì)先執(zhí)行內(nèi)存復(fù)制操作,讓 bgrewriteaof 子進(jìn)程擁有此時(shí)的 Redis 內(nèi)存快照,子進(jìn)程遍歷Redis 內(nèi)存快照中的全部 field-value pairs,生成重寫記錄。

          MySQL:在 AOF Rewrite 過程中,主進(jìn)程除了把寫命令寫入 AOF 緩沖區(qū),還要把寫命令寫入 AOF 重寫緩沖區(qū)。一份數(shù)據(jù)要寫入兩個(gè)緩沖區(qū),還要寫入兩個(gè) AOF 文件,產(chǎn)生兩次磁盤 I/O,太浪費(fèi)了。

          上述的 AOF Rewrite 操作是 Redis 7.0 之前的邏輯,俗話說得好,“只要思想不滑坡,辦法總比困難多”。為了解決性能問題,7.0 版本開始引入 Multi-Part AOF 機(jī)制。

          篇幅有限,Multi-Part AOF 具體實(shí)現(xiàn)原理詳見《Redis 高手心法》,這里不在一一列舉。

          2.3主從復(fù)制架構(gòu)

          Chaya:“有了 RDB 快照和 AOF 再也不怕宕機(jī)丟失數(shù)據(jù)了,但是 Redis 實(shí)例宕機(jī)了怎么辦?如何實(shí)現(xiàn)高可用呢?”

          Chaya 愣了一會(huì)兒,又趕緊補(bǔ)充道:“依然記得那晚我和我的戀人鴛語輕傳,香風(fēng)急促,走在成都的街頭約會(huì)。可是這時(shí)候 Redis 忽然宕機(jī)了,無法對(duì)外提供服務(wù),電話連環(huán) call,豈不是折煞人也“。

          莫怕,為了你們的幸福。我提供了主從模式,通過主從復(fù)制,將一份冗余數(shù)據(jù)復(fù)制到其他 Redis 服務(wù)器,實(shí)現(xiàn)高可用。你們放心地說溫存,說風(fēng)月。

          Chaya:“master 和 slave 的同步是如何完成的呢?master 的數(shù)據(jù)是一次性傳給 slave,還是分批同步?主從正常運(yùn)行期間又怎么同步呢?要是 master 和 slave 間的網(wǎng)絡(luò)斷連了,重新連接后數(shù)據(jù)還能保持一致嗎?”

          你問題怎么這么多?不要急。我知道你想安心地與戀人相會(huì),不受 Redis 宕機(jī)導(dǎo)致的服務(wù)報(bào)警的干擾。主從數(shù)據(jù)同步分為 4 種情況。

          ◎ master 和 slave 第一次全量同步。

          ◎ master 和 slave 正常運(yùn)行期間的數(shù)據(jù)同步。

          ◎ master 和 slave 網(wǎng)絡(luò)斷開重連同步。

          主從庫(kù)第一次復(fù)制過程大體可以分為 3 個(gè)階段:建立連接階段(準(zhǔn)備階段)、同步數(shù)據(jù)階段、發(fā)送同步期間接收的新寫命令到 slave 階段。


          更多細(xì)節(jié),詳見《Redis 高手心法》......


          2.4哨兵集群

          主從復(fù)制架構(gòu)面臨一個(gè)嚴(yán)峻問題:master 宕機(jī),無法執(zhí)行寫操作,無法自動(dòng)選擇一個(gè) slave 切換為 master,也就是無法實(shí)現(xiàn)故障自動(dòng)切換。

          Chaya 的戀人:“眼前是橡樹的綠葉,白色的竹籬笆。好想告訴我的她,這里像幅畫。一起手牽手么么噠(此處省略 10000 字)Redis 忽然宕機(jī),我總不能把 Chaya 推開,停止甜蜜,然后打開電腦手工進(jìn)行主從切換,再通知其他程序員把地址改成新master 的信息上線?”。

          如此一折騰恐,想必你心里的雨傾盆地下,萬萬使不得。所以必須有一個(gè)高可用的方案,為此,我提供一個(gè)高可用方案——哨兵(sentinel)。

          哨兵是 Redis 的一種運(yùn)行模式,它專注于對(duì) Redis 實(shí)例(master、slave)運(yùn)行狀態(tài)的監(jiān)控,并能夠在 master 發(fā)生故障時(shí)通過一系列的機(jī)制實(shí)現(xiàn)選主及主從切換,實(shí)現(xiàn)自動(dòng)故障切換,確保整個(gè)Redis 系統(tǒng)的可用性。

          你就可以安心地與你的戀人 Chaya 在歡樂港灣約會(huì),盡情享受甜蜜,哪怕是吵架都那么醉人,不再需要擔(dān)心 Redis 忽然宕機(jī)帶來的煩惱。

          我們先從全局看哨兵,簡(jiǎn)要地了解它的整個(gè)運(yùn)作流程,接著針對(duì)每個(gè)任務(wù)詳細(xì)分析,Redis 哨兵的主要職責(zé)如下。

          Chaya:“來說下實(shí)現(xiàn)原理吧。”

          篇幅有限,我就不繼續(xù)細(xì)說實(shí)現(xiàn)原理的細(xì)節(jié)了,現(xiàn)在新書上市,優(yōu)惠力度很大,原價(jià) 100,現(xiàn)在 5 折優(yōu)惠,各位道友只需拿出 50 靈石,購(gòu)買查看完整版的《Redis 高手心法》進(jìn)行修煉。


          3IT 大佬們對(duì)本書的贊譽(yù)

          以下來自一些 IT 技術(shù)大佬對(duì)本書的推薦語。


          限時(shí)五折優(yōu)惠,快快搶購(gòu)吧!

          瀏覽 216
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人三级高清 | sm调教视频网站 | 成人黄色电影在线视频 | 加勒比国产在线 | 国产精品久久久成人 |