Redis Hash資料結構

2022-06-04 09:48:06 字數 1486 閱讀 4958

1、redis的字典使用雜湊表作為底層實現,乙個雜湊表裡面可以有多個雜湊表節點,而每個雜湊表節點就儲存了字典中的乙個鍵值對。

2、redis 字典所使用的雜湊表由dict.h/dictht結構定義:

typedef struct

dictht dictht;

1.table屬性是乙個屬組,陣列中的每個元素都是乙個指向dict.h/dictentry結構的指標,每個dictentry結構儲存著乙個鍵值對;2.size屬性記錄了雜湊表的大小,也即是table陣列的大小,而used屬性則記錄了雜湊表目前已有節點(鍵值對)的數量;

3.sizemask屬性的值總是等於size-1,這個屬性和雜湊值一起決定乙個鍵應該被放到table陣列的哪個索引上面;

3、雜湊表節點使用dictentry結構表示, 每個dictentry結構都儲存著乙個鍵值對:

typedef struct

dictentry v;

//指向下個雜湊表節點,形成鍊錶

struct dictentry *next;

} dictentry;

1.key屬性儲存著鍵值對中的鍵,而v屬性則儲存著鍵值對中的值,其中v的值可以是乙個指標,或者是乙個uint64_t整數,或者是乙個int64_t整數;

2.next屬性是指向另乙個雜湊表節點的指標,這個指標可以將多個雜湊值相同的鍵值對連線在一起,以此來解決鍵衝突的問題;

舉例說明,如何通過next指標,將兩個索引值相同的鍵k1和k0連線在一起:

4、redis 中的字典由dict.h/dict結構表示:

typedef struct

dict dict;

1.type屬性和privdata屬性是針對不同型別的鍵值對, 為建立多型字典而設定的;

2.ht屬性是乙個包含兩個項的陣列, 陣列中的每個項都是乙個dictht雜湊表, 一般情況下, 字典只使用ht[0]雜湊表,ht[1]雜湊表只會在對ht[0]雜湊表進行 rehash 時使用;

3.除了ht[1]之外, 另乙個和 rehash 有關的屬性就是rehashidx: 它記錄了 rehash 目前的進度, 如果目前沒有在進行 rehash , 那麼它的值為-1

4.舉例說明乙個普通狀態下(沒有進行rehash)的字典:

Redis hash資料型別

1.hash型別?在redis中,hash是乙個鍵值 key value 對集合。簡單來講就是field和value的對映表,比較適合於儲存物件。hash的儲存用法 在這邊,如果你輸入的是漢語,想想也就知道我們在底層中儲存中,存到是編碼後的資料。2.常見的hash操作指令命令 解釋hdel key ...

redis hash結構如何設定過期時間

redis中有個設定時間過期的功能,即通過setex或者expire實現,目前redis沒有提供hsetex 這樣的方法,redis中過期時間只針對頂級key型別,對於hash型別是不支援的,這個時候,我們可以採用,所以如果想對hash進行expires設定,可以採用下面的方法 redis 127....

redis hash資料占用記憶體測試

對於hash或者普通string set 其實都是hash 記憶體占用明顯跟key的數量有莫大的關係,key對應的value長度對於記憶體占用影響不大 r redis.redis host 127.0.0.1 port 6379,db 0 for i in xrange 100000 r.hmset...