Redis學習 1 基礎資料結構(三) 字典

2021-08-21 13:36:42 字數 864 閱讀 5699

下圖(1-7)為linked list在redis中的實現:

// 節點

typedef struct dictentry

v; // 鏈結下乙個節點形成鍊錶

struct dictentry * next;

} dictentry;

// 雜湊表

typedef struct dictht

dictht;

// 對應型別資料操作函式

typedef struct dicttype

dicttype;

// 字典

typedef struct dict

dict;

redis使用dictentry儲存節點值,使用dictht操作雜湊表,dict實現各種型別資料的操作,dict操作字典,最終組成乙個多型字典。

下圖(1-8)為鍊錶在記憶體中的結構:

下表(1-9)表述了dict特點和器實現之間的關係

hash衝突

dict

*next,在最歡情況下雜湊表將退化為單向鍊錶

雜湊演算法

dict

*key,murmurhash演算法;

dictht

sizemask,hash&sizemask;

rehash

dict

ht[2]

關於這個演算法網上可以找到對應的實現,而我偶然間發現的一片部落格中指出,已經有穩定的構造碰撞的方法這篇文章,於我而言,需要注意在使用redis的時候不能直接將外部的輸入作為鍵來儲存資料。

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...

Redis 學習筆記 資料結構(1)

sds 簡單動態字串 sds的實現 struct sdshdr 問題 為什麼redis沒有直接使用c語言的字串而是使用了sds dynamic string 呢?鍊錶 鍊錶的實現 typedef struct list list typedef struct listnode listnode 特點...