2.2 鍊錶
2.3 字典
2.3.3 擴容
2.4 跳躍表
鍵對應的資料型別只有一種:
鍵對應的值包含五種資料型別:
主要介紹以上五種資料型別底層的資料結構
全稱是****** dynamic string,對c語言中的字元陣列做了封裝,使用len欄位標誌buf陣列中的已用空間,使用free欄位標誌buf中的未使用空間。
sds記憶體空間管理策略不同於c語言的字元陣列。修改字串時,系統不僅為sds的buf申請相應空間儲存字串,還會額外申請未使用的空間用於未來使用。
sds記憶體空間惰性釋放,不是直接釋放buf,而是修len以及free,標誌buf中的已用空間以及可用空間。這樣方便未來使用。
sds字元陣列
獲取字串長度的時間複雜度
o(1)
o(n)
修改字串時,緩衝區溢位風險
sds自動檢查空間是否足夠,不夠就自動分配
手動檢查/分配空間
修改字串時,記憶體分配次數
預分配空間,最多分配n次
每次修改字串,都要分配空間
修改字串時,記憶體釋放
不釋放空間,只更free以及len,方便未來使用
釋放空間
redis中的鍊錶是雙向鍊錶,相比較單向鍊錶是一種空間換時間的方案,優點如下:
雙向鍊錶在redis中的主要用途是:
typedef struct dictht dictht;
typedef struct dictentry v;
// 指向下個雜湊表節點,形成鍊錶
計算雜湊值
雜湊表的鍵雜湊值是基於murmurhash演算法,優點:
解決衝突
如果見的雜湊值相等,就基於鍊錶法(單向鍊錶)將物件連線起來,新插入節點放在鍊錶頭部。
漸進式擴容條件
負 載因
子=ht
[0].
used
/ht[
0].s
ize負載因子=ht[0].used/ht[0].size
負載因子=h
t[0]
.use
d/ht
[0].
size
出現以下操作之一就會執行擴容操作:
漸進式擴容過程
擴容期間的操作
Redis01 Redis服務端環境搭建
工具獲取 連線遠端伺服器 向遠端伺服器傳送檔案 首次啟動虛擬機器時檢視不到ip位址 利用 ifup 命令來開啟指定的網路介面 ifup eth0 開啟eth0這個網路介面 4 利用xshell或者securecrt連線伺服器 技巧01 利用securecrt連線後出現亂碼問題 待更新.本博文預設使用...
全棧學習之Redis01 Redis的簡單介紹
內容簡述 mysql資料庫,是放在硬碟裡的 redis資料庫,是放在記憶體裡的 隨著網際網路 需求劇增,傳統的關聯式資料庫mysq,不能滿足超大規模和高併發的應用。l資料庫,已經適應不了資料輸入輸出的壓力,而快取可以降低讀取壓力。可以說,想開發中大型專案就必須知道redis 隨著網際網路 大資料時代...
redis學習記錄01 初識redis
redis是乙個速度非常快的非關係型資料庫,儲存key與5種不同型別的value之間對映,可以將儲存在記憶體的鍵值對資料持久化到硬碟,可以使用複製特性來進行擴充套件效能,還可以使用客戶端分片來擴充套件寫效能.說明mysql mongodb redis 型別關係型資料庫 非關係型資料庫 非關係型資料庫...