欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

了解redis中RDB結(jié)構(gòu)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年08月29日 10:24:17   作者:huangxincheng  
這篇文章主要為大家詳細(xì)介紹了redis中RDB結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

RDB文件是在redis的“快照”的模式下才會(huì)產(chǎn)生,那么如果我們理解了RDB文件的結(jié)構(gòu),是不是讓我們對(duì)“快照”模式能做到一個(gè)心中有數(shù)呢???

一、RDB結(jié)構(gòu)剖析

  首先呢,我們要對(duì)RDB文件有一個(gè)概念性的認(rèn)識(shí),比如下面畫的圖一樣:

從圖中,我們大概看到了RDB文件的一個(gè)簡(jiǎn)要的存儲(chǔ)模式,但為了更好的方便對(duì)照,我準(zhǔn)備save一個(gè)empty database,對(duì)比一下看看效果:

然后我們用winHex打開dump.rdb文件,看看它的16進(jìn)制。

好了,該打開的我都打開了,下面我們一一來(lái)比較一下。

1. Redis參數(shù): 可以看到在16進(jìn)制的前5個(gè)字節(jié)中,是“REDIS"五個(gè)大字母,這個(gè)的作用顯而易見,肯定就是判斷當(dāng)前的文件是否為“RDB文件“,這樣才方便用常量的時(shí)間來(lái)判別。。。

2. db_version: 在Redis字符之后,我們看到了占用4個(gè)字節(jié)的0006,這個(gè)就是RDB文件結(jié)構(gòu)圖中的 db_version。對(duì)吧,同樣也很簡(jiǎn)單,就是判斷當(dāng)前Redis的版本號(hào),對(duì)否???

3. database: 由于我演示的是一個(gè)empty database,自然沒(méi)有相應(yīng)的結(jié)構(gòu),等下我們?cè)俨迦胗涗洠賹?duì)比一下。

4. EOF: 從winHex上面你是否看到了,它占用一個(gè)字節(jié)的空間,就是一個(gè)“y”上面加了兩點(diǎn),由于用unicode無(wú)法表示,所以出現(xiàn)了這么個(gè)亂碼,當(dāng)然16進(jìn)制可以標(biāo)識(shí),就是所謂的“FF”,看到了沒(méi)有??? 那么它的作用就是標(biāo)識(shí)database的結(jié)束。

5. checksum: 從名字上你就可以看得到,它就是一個(gè)校驗(yàn)和,原理當(dāng)然就是看文件是否損壞,或者是否被修改,這樣有點(diǎn)像現(xiàn)在的OAuth驗(yàn)證,對(duì)吧,它占用了8個(gè)字節(jié),也就是最后的:DC B3 43 F0 5A DC F2 56。。。

二、帶數(shù)據(jù)的RDB文件結(jié)構(gòu)演示

好了,上面我已經(jīng)演示了除Database之外的所有參數(shù),下面我們來(lái)set一個(gè)最簡(jiǎn)單的string類型,看看database結(jié)構(gòu)是否如圖所示。

用WinHex打開dump.rdb文件如下:

為了方便對(duì)照,我在圖中標(biāo)記了一下Database開始的位置,也就是十六進(jìn)制的 FE。。。

1. database [selectDB]: 可以看到,selectDB其實(shí)就是一個(gè)無(wú)法用unicode標(biāo)記出來(lái)的一個(gè)字節(jié),十六進(jìn)制就是FE,當(dāng)redis碰到這個(gè)字符的時(shí)候就知道自己該干嘛了。。。。要準(zhǔn)備執(zhí)行select命令了。。。

2. database[db_number]: 在FE之后,我們看到了十六進(jìn)制的 ”03“,也就是切換到第三個(gè)數(shù)據(jù)庫(kù)中,還記得嗎? 我之前在set數(shù)據(jù)的時(shí)候,曾今執(zhí)行過(guò)select 3,也就是將數(shù)據(jù)set到第3號(hào)數(shù)據(jù)庫(kù)中,如果你忘記了,沒(méi)關(guān)系,我用redis客戶端打開給你看~~

3. database[pairs][type]: 當(dāng)你知道select哪一號(hào)數(shù)據(jù)庫(kù)之后,接下來(lái)的操作就是怎么去分析key,value數(shù)據(jù)了,在key/value數(shù)據(jù)中,第一個(gè)就是type,其實(shí)這個(gè)type就是你的value的encoding類型,可以看到在winHex中表示的0,也就是以下的源碼:

4.database[pairs][key][len]: 在type之后,就是所謂的key,而key的組合模式是【len,value】,其中l(wèi)en就是key的長(zhǎng)度,你也可以看到,winHex中表示的是 “04”,也就是說(shuō)name的長(zhǎng)度為4。對(duì)吧。。。

5.database[pairs][key][value] 同樣的道理,這里的模式也是【len,value】,前面為value的length,后面為value的具體值。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • linux?redis-連接命令解讀

    linux?redis-連接命令解讀

    這篇文章主要介紹了linux?redis-連接命令解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Redis偶發(fā)連接失敗案例實(shí)戰(zhàn)記錄

    Redis偶發(fā)連接失敗案例實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Redis偶發(fā)連接失敗的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使Redis具有一定的參考學(xué)習(xí)價(jià)值,用需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Redis三種常用的緩存讀寫策略步驟詳解

    Redis三種常用的緩存讀寫策略步驟詳解

    Redis有三種讀寫策略分別是:旁路緩存模式策略、讀寫穿透策略、異步緩存寫入策略,接下來(lái)通過(guò)本文給大家詳細(xì)介紹下Redis三種常用的緩存讀寫策略,感興趣的朋友一起看看吧
    2022-05-05
  • 基于Redis位圖實(shí)現(xiàn)用戶簽到功能

    基于Redis位圖實(shí)現(xiàn)用戶簽到功能

    這篇文章主要介紹了基于Redis位圖實(shí)現(xiàn)用戶簽到功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • redis中熱key問(wèn)題該如何解決

    redis中熱key問(wèn)題該如何解決

    這篇文章主要給大家介紹了關(guān)于redis中熱key問(wèn)題該如何解決的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • RabbitMQ+redis+Redisson分布式鎖+seata實(shí)現(xiàn)訂單服務(wù)的流程分析

    RabbitMQ+redis+Redisson分布式鎖+seata實(shí)現(xiàn)訂單服務(wù)的流程分析

    訂單服務(wù)涉及許多方面,分布式事務(wù),分布式鎖,例如訂單超時(shí)未支付要取消訂單,訂單如何防止重復(fù)提交,如何防止超賣、這里都會(huì)使用到,這篇文章主要介紹了RabbitMQ+redis+Redisson分布式鎖+seata實(shí)現(xiàn)訂單服務(wù)的流程分析,需要的朋友可以參考下
    2024-07-07
  • redis使用zset實(shí)現(xiàn)延時(shí)隊(duì)列的示例代碼

    redis使用zset實(shí)現(xiàn)延時(shí)隊(duì)列的示例代碼

    本文主要介紹了redis使用zset實(shí)現(xiàn)延時(shí)隊(duì)列的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 基于Redis6.2.6版本部署Redis?Cluster集群的問(wèn)題

    基于Redis6.2.6版本部署Redis?Cluster集群的問(wèn)題

    這篇文章主要介紹了基于Redis6.2.6版本部署Redis?Cluster集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Redis密碼設(shè)置與訪問(wèn)限制實(shí)現(xiàn)方法

    Redis密碼設(shè)置與訪問(wèn)限制實(shí)現(xiàn)方法

    這篇文章主要介紹了Redis密碼設(shè)置與訪問(wèn)限制實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringMVC集成redis配置的多種實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論