最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解

 更新時(shí)間:2022年08月02日 08:48:45   作者:廢物大師兄  
這篇文章主要介紹了Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下

1. Redis 底層數(shù)據(jù)結(jié)構(gòu)

Redis數(shù)據(jù)庫就像是一個(gè)哈希表,首先對(duì)key進(jìn)行哈希運(yùn)算得到哈希值再取模得到一個(gè)下標(biāo),每個(gè)元素是一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)之間形成鏈表。這感覺有點(diǎn)像Java中的HashMap。

不同的數(shù)據(jù)類型的實(shí)現(xiàn)方式是不一樣的,可以通過object encoding命令查看底層真正的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)

同一種類型在不同的條件下所采用的數(shù)據(jù)結(jié)構(gòu)也不一樣,例如:

Redis是鍵值對(duì)形式的數(shù)據(jù)庫,key可以是任意值(PS:最終都會(huì)轉(zhuǎn)成string),value有多種數(shù)據(jù)類型

詳見:https://redis.io/docs/manual/data-types/data-types-tutorial/

至此,已經(jīng)很清楚,hash底層的結(jié)構(gòu)是 ziplist 和 hashtable

那么,什么時(shí)候會(huì)從ziplist轉(zhuǎn)成hashtable呢?這個(gè)在redis.conf中有相關(guān)的配置,如下:

默認(rèn)情況下:

當(dāng)ziplist中entry的數(shù)量超過512的時(shí)候,會(huì)轉(zhuǎn)成hashtable 單個(gè)元素的值超過64字節(jié)的時(shí)候,會(huì)轉(zhuǎn)成hashtable

2. hashtable

在Redis中hashtable就是字典dict

通過源碼,可以看到dict是這樣定義的:

3. redisDb 與 redisObject

通過源碼得知,redisDb代表redis數(shù)據(jù)庫,redisObject代表存到數(shù)據(jù)庫中的數(shù)據(jù)

字典dict的結(jié)構(gòu)前面已經(jīng)看過了,于是整個(gè)數(shù)據(jù)庫的結(jié)構(gòu)大概就是下面這個(gè)樣子:

 

4. ziplist

ziplist是一種特殊編碼的雙鏈表,被設(shè)計(jì)成非常節(jié)省內(nèi)存。它存儲(chǔ)字符串和整型值,其中整數(shù)被編碼為實(shí)際整數(shù),而不是一系列字符。它允許在O(1)時(shí)間內(nèi)在列表的任意一邊進(jìn)行push和pop操作。但是,由于每個(gè)操作都需要重新分配ziplist所使用的內(nèi)存,因此實(shí)際的復(fù)雜性與ziplist所使用的內(nèi)存量有關(guān)。

ziplist的大體布局如下:

<zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend>

<uint32_t zlbytes>: 一個(gè)無符號(hào)整數(shù),用于保存ziplist占用的字節(jié)數(shù),包括zlbytes字段本身的四個(gè)字節(jié)。需要存儲(chǔ)這個(gè)值,以便能夠調(diào)整整個(gè)結(jié)構(gòu)的大小,而不需要首先遍歷它。
<uint32_t zltail> : 列表中最后一個(gè)條目的偏移量。
<uint16_t zllen>  : 條目的數(shù)量。當(dāng)有超過2^16-2個(gè)條目時(shí),這個(gè)值被設(shè)置為2^16-1,我們需要遍歷整個(gè)列表來知道它包含多少項(xiàng)。
<uint8_t zlend> : 一個(gè)特殊的條目,表示 ziplist 的結(jié)尾

 

5. linkedlist

linkedlist是一個(gè)雙向鏈表

 

6. quicklist

quicklistNode是一個(gè)32字節(jié)的結(jié)構(gòu)體,描述快表的ziplist。

quicklist = linkedlist + ziplist

到此這篇關(guān)于Redis 哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)Redis哈希底層數(shù)據(jù)結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你搞懂Redis Stream的6種消息處理模式

    一文帶你搞懂Redis Stream的6種消息處理模式

    Redis 5.0版本引入的Stream數(shù)據(jù)類型,為Redis生態(tài)帶來了強(qiáng)大而靈活的消息隊(duì)列功能,本文將為大家詳細(xì)介紹Redis Stream的6種消息處理模式,感興趣的小伙伴可以了解一下
    2025-05-05
  • Redis源碼分析之set?和?sorted?set?使用

    Redis源碼分析之set?和?sorted?set?使用

    本文介紹了Redis?中的?set?和?sorted?set?使用源碼實(shí)現(xiàn)分析,Redis?的?Set?是?String?類型的無序集合,集合成員是唯一的,sorted?set有序集合和集合一樣也是?string?類型元素的集合,對(duì)Redis?set?和?sorted?set使用相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • redis通過位圖法記錄在線用戶的狀態(tài)詳解

    redis通過位圖法記錄在線用戶的狀態(tài)詳解

    這篇文章主要給大家介紹了關(guān)于redis如何通過位圖法記錄在線用戶的狀態(tài)的相關(guān)資料,文中先對(duì)位圖進(jìn)行了一個(gè)簡(jiǎn)單的介紹,而后通過示例代碼將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Redis keys命令的具體使用

    Redis keys命令的具體使用

    本文主要介紹了Redis keys命令的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Redis延遲隊(duì)列的實(shí)現(xiàn)示例

    Redis延遲隊(duì)列的實(shí)現(xiàn)示例

    Redis 延遲隊(duì)列是一種使用 Redis 實(shí)現(xiàn)的消息隊(duì)列,本文主要介紹了Redis延遲隊(duì)列的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • windows上修改redis端口號(hào)的操作步驟

    windows上修改redis端口號(hào)的操作步驟

    redis是一個(gè)開源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),常用做數(shù)據(jù)庫、緩存和消息代理,默認(rèn)的端口號(hào)為6379,那么如何在windows上修改redis端口號(hào),接下來本文給大家詳細(xì)介紹了windows上修改redis端口號(hào)的操作方法,需要的朋友可以參考下
    2024-02-02
  • Linux下Redis集群搭建全過程(主從+哨兵)

    Linux下Redis集群搭建全過程(主從+哨兵)

    這篇文章主要介紹了Linux下Redis集群搭建全過程(主從+哨兵),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Redis 集群搭建和簡(jiǎn)單使用教程

    Redis 集群搭建和簡(jiǎn)單使用教程

    集群技術(shù)是構(gòu)建高性能網(wǎng)站架構(gòu)的重要手段,下面這篇文章主要介紹了Redis 集群搭建和簡(jiǎn)單使用教程,文中通過示例代碼和圖片介紹的很想,對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • windows下通過批處理腳本啟動(dòng)redis的操作

    windows下通過批處理腳本啟動(dòng)redis的操作

    本文主要給大家介紹了windows下通過批處理腳本啟動(dòng)redis的操作,windows下redis啟動(dòng),需要進(jìn)入redis安裝目錄,然后shift+右鍵,選擇“在此處打開命令窗口”,然后輸入redis-server.exe redis.conf,就可以啟動(dòng)redis了,文中有詳細(xì)的圖文參考,感興趣的朋友可以參考下
    2023-12-12
  • 一文詳解redis高可用Sentinel?

    一文詳解redis高可用Sentinel?

    本文主要介紹了redis高可用Sentinel的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評(píng)論

买车| 同仁县| 清徐县| 赤壁市| 施甸县| 革吉县| 栾城县| 承德市| 永清县| 乐陵市| 铁力市| 报价| 常熟市| 赤水市| 闽侯县| 沛县| 临清市| 新田县| 西安市| 西吉县| 霍邱县| 临泉县| 永寿县| 且末县| 阿城市| 内江市| 阿拉尔市| 固始县| 尚义县| 高邑县| 玛纳斯县| 慈溪市| 常德市| 射洪县| 济源市| 安阳县| 宾阳县| 洛扎县| 加查县| 黎川县| 临沂市|