Redis 01 Redis基礎資料結構

2021-10-07 19:37:58 字數 1624 閱讀 5045

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 型別關係型資料庫 非關係型資料庫 非關係型資料庫...