redis資料結構之dict 概要

2021-07-13 03:56:44 字數 483 閱讀 3137

1.移植使用

void *zmalloc(size_t size);

void *zcalloc(size_t size);

void zfree(void *ptr);

#define random() rand()

#define snprintf _snprintf_s

long

long timeinmilliseconds(void)

2.特點

使用2^n為雜湊陣列長度,而不是通用的質數

使用鍊錶來處理碰撞問題

將擴容分散到多個小步驟中,以實現漸進式rehash

漸進式rehash可以在空閒時執行指定時間

3.核心

如何實現漸進式rehash

其實一步到位也是可以得,不過漸進式rehash可以使得避免不可預料的延遲,將整體延遲分散到多個步驟中,類似於map 紅黑書中的動態平衡。

redis資料結構 dict

typedef struct dict dict 雜湊表結構,每個字典中含有兩個這樣的雜湊表結構,存在兩個的原因是因為我們為了控制雜湊表的負載因子在合理的範圍內時,可能需要rehash,rehash採用的 漸進式雜湊 this is our hash table structure.every di...

Redis 資料結構之dict(2)

本文及後續文章,redis版本均是v3.2.8 上篇文章 redis 資料結構之dict 我們對dict的結構有了大致的印象。此篇文章對dict是如何維護資料結構的做個詳細的理解。老規矩還是開啟redis的原始碼,檔案dict.c 一 dict資料結構的維護 1 dictcreate 建立乙個新的雜...

Redis原始碼 dict資料結構(實現)

本文分析的是src dict.c檔案。從結構上來說,可以分為 1.私有函式 以下劃線開頭的一般都是,一般都是一些輔助函式 2.公開api。從功能來說,可以分為 1.dict初始化 析構 2.元素操作 查詢 刪除 插入 替換 修改值 清空資料 3.遍歷dict,迭代器相關 比如需要持久化雜湊表的資料時...