redis結構概述

  • Redis是一個K-V NoSQL非關係型數據庫。

  • Redis有五種數據類型,分別string類、hash類型、list類型、set類型、zset類型。這五種類型,都是針對K-V中的V進行設計的。

  • 關於Redis數據存儲的細節,涉及到內存分配器(如jemalloc)、簡單動態字符串(SDS)、5種對象類型及內部編碼、redisObject

在這裏插入圖片描述

(1)dictEntry:Redis是Key-Value數據庫,因此對每個鍵值對都會有一個dictEntry,裏面存儲了指向Key和Value的指針;next指向下一個dictEntry,與本Key-Value無關。
(2)Key:圖中右上角可見,Key(”hello”)並不是直接以字符串存儲,而是存儲在SDS結構中。
(3)redisObject:Value(“world”)既不是直接以字符串存儲,也不是像Key一樣直接存儲在SDS中,而是存儲在redisObject中。實際上,不論Value是5種類型的哪一種,都是通過redisObject來存儲的;而redisObject中的type字段指明瞭Value對象的類型,ptr字段則指向對象所在的地址。不過可以看出,字符串對象雖然經過了redisObject的包裝,但仍然需要通過SDS存儲。
實際上,redisObject除了type和ptr字段以外,還有其他字段圖中沒有給出,如用於指定對象內部編碼的字段;後面會詳細介紹。
(4)jemalloc:無論是DictEntry對象,還是redisObject、SDS對象,都需要內存分配器(如
jemalloc)分配內存進行存儲。以DictEntry對象爲例,有3個指針組成,在64位機器下佔24個字節,jemalloc會爲它分配32字節大小的內存單元。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章