Redis 基礎結構

2021-08-08 05:28:06 字數 2054 閱讀 6959

dict是乙個維護k-v對映關係的資料結構,與map相似,旨在解決查詢問題。

dict優點主要在於rehash。

dict包含2個hash表ht[0]和ht[1],0用於平時使用,而1用於rehash。

dict的rehash是漸進性進行的,一種是按照時間(每次執行乙個固定的時間)、一種是按照索引值(一次移動乙個索引下的kv)。

漸進式的rehash使得其對dict的增刪改查效率影響較小。

dict的增刪查操作:

增和改:效率低?

未rehash時 加入hash表0。

rehash時 加入hash 1

刪和查:

未rehash 查詢0

rehash時 先找0 再找1。

sds是redis中的字串結構。

sds結構主要包含乙個陣列存放字串、free記錄陣列未使用位元組、len記錄陣列已使用長度

sds優勢:

1、o1複雜度的獲取字串長度 --sds裡的len變數

2、杜絕快取區溢位–sds的自動檢測及擴充套件功能

3、減少記憶體重分配次數–sds的預分配功能(擴充套件時額外分配已使用長度的未使用空間)和惰性空間釋放(字串縮短時釋放的空間不會立馬釋放)

4、二進位制安全–sds的len變數判斷結尾而不是c的空格

5、相容c–sds仍會在字串結尾加上乙個空格

一種特殊的雙向鍊錶。

特殊性:記憶體位址連續、可變長度的編碼方式。

新增或刪除可能引起連鎖的更新操作--可變長度的編碼方式。

一種結合list和ziplist的鍊錶

draw.io evaluation version

ziplist

ziplist

ziplist

每個節點由乙個ziplist實現。主要客服ziplist由於記憶體連續而引起的插入操作大幅度移動的缺點。

相關引數設定:

list-max-ziplist-size -2

list-compress-depth 0

跳躍表:有序/查詢速率媲美平衡樹。

整數集合:儲存數量不多且不重複的整數

特點:公升級特性,當新加入的資料長度大於已有資料的長度時,intset會進行公升級,增大儲存資料的位數(16-32-64)。

優點:節省記憶體。

robj是乙個用來表示value資料型別的通用詩句結構

robj欄位:

type:物件的資料型別 4bit,5種取值。(string、list、set、zset、hash)

encode:物件內部的表示方式,4bit,10種取值

type

encode

obj_string

obj_encoding_raw:string使用sds表示

obj_encoding_int:string為數字使用long表示

obj_encoding_embstr:嵌入式sds 32位元組

obj_list

redis_encoding_ziplist:ziplist

redis_encoding_linkedlist:(以棄用)

obj_encoding_quicklist

obj_set

redis_encoding_ht:dict

redis_encoding_intset:(數量小且全為整數)intset

obj_zset

redis_encoding_ziplist:ziplist(數量與長度較小)

redis_encoding_skiplist skiplist

obj_hash

redis_encoding_ziplist:ziplist(體量較小時)

redis_encoding_ht:dict

sds與嵌入式sds區別

建立sds的字串需要呼叫2次記憶體

分別建立redisobject和sdshdr,而嵌入式sds只需要一次

建立和釋放都訪問一次記憶體,

嵌入式sds是連續的記憶體區域

32位元組以內使用嵌入式sds

redis版本3.29 實測字串長度為45時才會開始使用sds

redis基礎結構 DICT

redis字典具dd有以下特點 字典 每個字典使用兩個雜湊表,用於實現漸進式 rehash typedef struct dict dict 雜湊表 typedef struct dictht dictht 雜湊表節點 typedef struct dictentry v 鏈往後繼節點 建立乙個比 ...

Redis 基礎資料結構

基礎資料型別 5種 string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 set key name value 命令用於設定給定key的值,如果key已經儲存其它值,則會覆蓋舊值,且與型別無關 get key name 命令用於獲取指定key的值,如果key不存在,則...

Redis 基礎資料結構

redis有5種基礎資料結構,分別是 string list hash set zset。1 string 字串 字串string是redis最簡單的資料結構,內部表示的就是乙個字元陣列。儲存值 set key value 獲取值 get key redis可以對多個字串進行批量讀寫。批量儲存 ms...