專案sds
c字串獲取字串長度
o(1)
o(n)
字串拼接時緩衝區溢位處理
通過free與當前待拼接的串作比較檢視是否記憶體是否足夠。如果不夠會做自動記憶體再分配。2*n(n為擴充之後的字串長度)
惰性釋放記憶體
對字串執行trim操作之後不會立即將多出來的記憶體釋放。而是記錄在free裡面待使用
2. 雙端鍊錶
資料結構:
/* * 雙端鍊錶結構
*/typedef struct list list;
特點:
查詢給定節點的前乙個節點,後乙個節點複雜度為o(1),往表頭或者表尾插入節點複雜度為o(1).
刪除給定節點,遍歷給定節點的複雜度為o(n)
應用範圍:
列表鍵,發布與訂閱,慢查詢,監視器
3. 字典
應用範圍:
計算hash鍵:當被用來作為資料庫底層實現或者雜湊鍵的底層實現時,用murmurhash2演算法
當字典超過負載因子時,採用rehash演算法:
應用場景:當hash表儲存的雜湊鍵值對太多或者太少時,需要對當前的雜湊表重新進行擴充套件或者收縮
擴充後的大小為: 第乙個大於或者等於 use * 2(2^n) 的值
收縮後的大小為: 第乙個大於或者等於 use 的值
漸進式rehash(分成多次將鍵值對由ht[0]移到ht[1],結束的標誌為rehashidx=-1 --rehash時使用)
step:
1.為ht[1]分配空間(分配方式見rehash擴充套件or收縮演算法),讓字典同時持有ht[0]和ht[1]
2.在rehash期間,每次從ht[0]移動資料到ht[1],rehashidx++,
3.每次對字典進行查詢操作,現在ht[0]中查詢是否存在該鍵值對。如果找不到檢視是否進行rehash操作,如果正在進行rehash操作會繼續在ht[1]中查詢
4.新增鍵值時,只會在ht[1]中新增。確保ht[0]處於收斂狀態
5.當ht[0]的use=0時,表示rehash操作已經完成。將ht[1]賦值給ht[0]。釋放ht[1]記憶體
跳躍表
應用範圍:
有序集合的底層實現,集群節點中使用
資料結構
/* * 跳躍表節點
*/typedef struct zskiplistnode level;
} zskiplistnode;
/* * 跳躍表
5. 整數集合
應用:用來存放元素均為整數的資料結構
集合鍵的底層實現
資料結構:
typedef struct intset intset;
壓縮列表
應用場景
列表鍵和雜湊鍵的底層實現之一。當列表或者雜湊表中包含的鍵值對是整數或者長度比較小的字串時,會採用壓縮列表作為底層實現之一
目的是為了節約記憶體
Redis五種資料結構
redis除了儲存鍵之外還可以儲存常見的5種資料型別,分別是 string list set zset hash。結構型別 結構儲存的值 結構的讀寫能力 string字串 可以是字串 整數或浮點數 對整個字串或字串的一部分進行操作 對整數或浮點數進行自增或自減操作 list列表 乙個鍊錶,鍊錶上的每...
Redis五種資料結構
對redis來說,所有的key 鍵 都是字串,所謂的5種資料結構是指針對value而言 資料結構型別 說明使用場景 常用方法 其他鏈結 string字串型別1 redis中最基本的資料型別,乙個key對應乙個value。2 是二進位制安全的,意思是 redis 的 string 可以包含任何資料。如...
Redis的5種資料結構
參考 基本型別有5個,string,mapmap,list,set,zset 從上到下一一對應,這是我取得別名 string 就是儲存二進位製流,這時候,jpg等,只要轉碼成功,均可儲存。mapmap 之所以叫mapmap,是因為,redis本身就是個map,而且儲存的不僅僅是乙個map,而是。ma...