redis資料結構 字串

2021-10-24 13:27:54 字數 1115 閱讀 1533

字串在redis中是非常常見的資料結構,儲存的key必須是字串,value也可以是字串。redis並沒有直接採用c語言中的字串表示,而是自己構建了一種資料結構sds(****** dynamic string 簡單動態字串),sds是redis的預設字串表示。

sds結構:

sds
示例

c語言使用n+1的字元陣列表示長度為n的字串,並且字元陣列的最後一位為空字串』\o』。

sds和c字串在設計上的差異造成了它們功能,效率,安全性上的區別。

1,長度

c字串由於並沒有記錄字元陣列的長度,通過遍歷的方式獲取,複雜度o(n);

sds直接去len的值,複雜度o(1)

2,字串拼接的區別

假設有字串s1(「redis1」),s2(「redis2」) ,現在要把s2拼接到s1上

c字串會直接對s1進行修改;

sds會先進行檢查,檢視空間是否足夠,如果不足,先分配足夠的空間,然後再對s1進行修改。

1,獲取長度的時候

c字串會給系統造成壓力,sds不會,可以反覆執行,因為效率為o(1)

2,字串修改的時候

c字串對於乙個長度為n的字串,由於它的實現方式,必須保證字元陣列長度為n+1,所以當字串縮短或增長的時候都會涉及到記憶體的重新分配。由於redis作為資料庫來使用,可能會出現頻繁修改的情況,這就會給系統造成壓力;

sds的設計避免了記憶體不斷分配的缺陷。在sds中:buf不僅可以包含字串,還可以保護未使用空間;正是未使用空間給sds帶來了巨大優勢。

同未使用空間,sds可以進行空間預分配和惰性空間釋放策略。

空間預分配:

在sds需要對字串進行修改的時候,它不僅會分配字串需要的空間,還會分配額外的未使用空間

惰性空間釋放:

在sds需求對字串進行縮短操作的時候,它只是用free進行了記錄,並沒有真正的釋放空間,

1,記憶體溢位

c字串在字元拼接的時候可能出現記憶體溢位

sds杜絕了記憶體溢位的問題,因為它會先進行檢查

Redis 資料結構 字串 二

字串型別是redis最基礎的資料結構,鍵,值均為字串型別,並且其他資料結構都是在字串的基礎上構建的。注 字串值最大不能超過512mb 一 命令 1 常用命令 1 設定值 set key value ex seconds px millseconds nx xx ex seconds 為鍵設定秒級過期...

Redis 資料結構 簡單動態字串

redis 是基於 c 語言的記憶體資料庫,但是 redis 中並沒有使用 c 語言的字串 實質是 以空格結尾的字元陣列 作為預設的字串,而是自己構建了一種名為簡單動態字串 dynamic string 的抽象資料結構,將其用作預設的字串表示。通常而言,sds 在 redis 中被用於 1.預設的字...

資料結構 字串

1 字串 include string.h include stdio.h include stdlib.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define ma...