對象總覽—第二回

今天是週末,但是也要繼續學習,加油,今天想總結一下Redis用到的數據結構,對它們各自的結構,做一個簡要的概括:

1.簡單動態字符串(SDS):由sdshdr組成

每個sdshdr結構表示一個SDS值,sdshdr結構有3個屬性,分別爲:

int類型的len,記錄SDS所保存的字符串的長度

int類型的free,記錄buffer數組中未使用字節的數量

char類型的數組(字節數組)buf[],用於保存字符串

 

2.雙端鏈表:由list和listNode組成

(1)每個鏈表節點使用一個listNode結構來表示,包含有3個屬性,分別爲:

前置節點prev

後置節點next

節點的值value

(2)鏈表用list來表示,有6個屬性,分別爲:

表頭節點head

表尾節點tail

鏈表所包含的節點數量len

節點值複製函數dup

節點值釋放函數free

節點值對比函數match

 

3.字典(符號表,關聯數組,映射)由dict,dictht和dictEntry組成

(1)Redis中的字典由dict結構表示,有4個屬性,分別爲:

類型特定函數type:type是一個指向dictType結構的指針,每個dictType結構保存了特定的函數

void類型的privdata:保存了需要傳給特定函數的參數

dictht類型的哈希表ht:是一個包含兩個項的數組,每個項都是一個dictht哈希表

int類型的rehashidx:和rehash有關的屬性,記錄了rehash目前的進度

(2)dictType結構,有6個函數:

計算哈希值的函數hashFunction

複製鍵的函數keyDup

複製值的函數valDup

對比鍵的函數keyCompare

銷燬鍵的函數keyDestructor

銷燬值的函數valDestructor

(3)哈希表由dictht結構定義,有4個屬性,分別爲:

dictEntry類型的數組table:數組中每一個元素都是指向dictEntry結構的一個指針,每個dictEntry結構保存着一個鍵值對

size屬性:保存哈希表的大小,也就是table數組的大小

sizemask屬性:總是等於size的大小減1(size-1)

used屬性:記錄已有節點的數量

(4)哈希表節點用dictEntry節點來表示,有3個屬性,分別爲:

key屬性:保存着鍵值對的鍵

v屬性:保存着鍵值對的值

next屬性:指向另一個哈希表的指針,可以將多個哈希值相同的指針連在一起,以此來解決鍵衝突的問題

 

4.跳躍表:由zskiplist和zskiplistNode組成

(1)zskiplist結構用來保存跳躍表節點的相關信息,包含4個屬性,分別爲:

header屬性:指向跳躍表的表頭節點

tail屬性:指向跳躍表的表尾節點

level屬性:記錄目前跳躍表內層數最大的那個節點的層數(表頭節點不算)

length屬性:記錄跳躍表的長度,也就是,跳躍表目前的節點的數量

(2)zskiplistNode結構用來表示跳躍表節點,有4個屬性,分別爲:

後退指針backward:用於從表尾向表頭訪問節點

分值score:是一個double類型的浮點數,用來從大到小排列節點的順序

成員對象obj:是一個指針,指向一個字符串對象,保存着一個SDS值

zskiplistLevel屬性:該數組可以包含多個元素,用來存儲層,每個元素都包含一個指向其他節點的指針,程序可以通過這些指針來加快訪問其他節點的速度

(3)zskiplistLevel數組,有兩個屬性:

前進指針forward:每個層都有一個指向表尾方向的指針,用來從表頭向表尾訪問節點

int類型的span:跨度,用來記錄兩個節點之間的距離

 

5.整數集合(intset):由intset組成

每個intset結構表示一個整數集合,包含3個屬性,分別爲:

編碼方式encoding:表示什麼類型的數組

length屬性:集合包含元素的數量

數組contents[]:保存元素的數組

 

6.壓縮列表(ziplist):由一系列特殊編碼的連續內存塊組成的順序型數據結構

以下是組成部分,包含5個屬性,分別爲:

zlbytes屬性:記錄壓縮列表佔用的內存字節數

zltail屬性:記錄壓縮列表表尾節點距離起始地址有多少字節

zllen屬性:記錄壓縮列表包含的節點數量

entryX屬性:壓縮列表的各個節點,可以任意多個節點

zlend屬性:用於標記壓縮列表的末端

 

以上便是Redis主要用到的幾種數據結構的構成,看來要好好記住了纔行!

2019.3.3

我是趕路人,有目前一起學習Redis的小夥伴嗎,歡迎關注“WeAre趕路人”,讓我們一起開始新的征程,求職之路,加油!

 

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