深入理解Redis 一 基本資料結構

2021-08-08 08:31:45 字數 1392 閱讀 1193

個人主頁:tuzhenyu』s page

內部資料結構主要包括:動態字串,雙端鍊錶,字典,跳躍表;

記憶體對映資料結果主要包括:整數集合,壓縮列表;

struct sds
sds使用抽象結構中的len來判斷字元創的結尾,而不是像c一樣使用空字元」\0」表示結尾,保證了二進位制的安全;

typedef struct listnodelistnode
typedef

struct

listlist

typedef struct dictdict
typedef

struct dicthtdictht

typedef

struct dictentry

}dictentry

redis的雜湊表使用鏈位址法來解決鍵衝突,每個雜湊表節點都有乙個next指標,相同索引的雜湊表節點用next指標構成乙個單向鍊錶;

隨著操作的不斷執行,雜湊表儲存鍵值對會逐漸地增多或者減少,為了讓雜湊表的負載因子維持在乙個合理的範圍之內,需要進行rehash重新雜湊操作;

為字典的ht[1]雜湊表分配空間

重新計算所有鍵值對的鍵值hash值,根據hash值和sizemask將鍵值對重新放在ht[1]雜湊表制定的位置上;

將ht[1]設定為ht[0],重新建立乙個空雜湊表ht[1]用作下一次的rehash操作;

為了避免rehash期間對伺服器效能造成的影響,伺服器不是一次性將ht[0]中的所有鍵值對rehash到ht[1]中,而是分多次漸進式rehash操作;

typedef

struct zskiplistnodelevel;

struct zskiplistnode pre;

double score;

robj *robj;

}zskiplistnode;

跳躍表的刪除

typedef struct intsetintset;
元素的插入無論公升級與否因為要保持順序性,因此插入的時間複雜度都為o(n)

intset整數集合是有序的,因此使用二分查詢演算法實現查詢操作,查詢的事件複雜度為o(log(n));

typedef

struct redisobject

字串物件

字串物件的常用指令

列表物件

列表物件常用指令

雜湊物件

雜湊物件常用指令

集合物件

集合常用指令

有序集合

有序集合常用指令

Opencv Python API 基本資料結構

本例使用python3.7 opencv環境配置方法 pip install numpy matplotlib 構造2 行 4列 全是0的uchar型別的二維陣列import numpy as np z np.zeros 2 4 np.uint8 type z zarray 0,0,0,0 0,0,...

深入理解Redis概念 精

redis 是nosql key value 可持久化,分布式,記憶體,快取的非關係型資料庫 有人問你什麼是redis你就上面這句話,詳細解釋分為四部分解釋 nosql key value 非關係型資料庫 nosql not only structured query language 不僅僅是支援...

深入理解阻塞佇列(一) 基本結構

blockingqueue是乙個繼承自queue的介面,在queue的佇列基礎上增加了阻塞操作。簡單來說,就是在在blockingqueue為空時從隊頭取資料將會被阻塞,因為此時還沒有資料可取,一旦佇列中有資料了,取資料的執行緒就會釋放得到了資料 如果blockingqueue有容量限制且滿了,那麼...