Redis字串的底層設計

2021-10-02 18:45:25 字數 942 閱讀 1832

redis的底層是用c語言來實現的,在c語言中字串的預設是以'\0'標識結束,而redis並沒有採用這種傳統的方法表示,而是自己構建了一種簡單動態字串(sds)來表示。

下面看一下什麼是sdssds的**定義,以及在儲存乙個字串"redis"時sds和傳統c的表示分別是怎麼樣使用sds的好處是什麼

sds是什麼

sds(****** dynamic string) -簡單動態字串,可以根據字串的大小,動態分配空間。

sds的定義

c和sds表示字串

儲存字串"redis"時,傳統c的表示

儲存字串"redis"時,sds的表示

使用sds的好處

(1) 通過sds獲取字串的長度時,時間複雜度為o(1),因為sds已經定義了儲存的字串的長度(len);如果通過傳統的c的表示來獲取字串的長度,時間複雜度為o(n),其中n是字串的長度。

(2) 避免了溢位

(3)避免了記憶體重新分配

(4)支援儲存二進位制資料

下一章節,會詳細的通過例項來分析使用sds的好處。

Redis的底層字串儲存 SDS

我們知道redis資料庫是使用c語言寫的,然而其內部的字串的儲存卻並不是使用傳統的c語言字串表示,而是使用一種名為簡單動態字串 dynamic string,sds 的抽象資料型別。首先我們來對sds有乙個大概的認識 如果我們客戶端執行如下命令 127.0.0.1 6381 set msg hell...

Redis的底層實現 字串章節

不要遺忘最初的目標。ruider 總結 about me redis的命令如下 set x hello get x helloredis作為一種儲存字串的快取結構,其具體實現是由c語言完成,在c語言中,字串是通過字元陣列實現的,即char,那麼redis對於字串的實現是不是也是基於字元陣列嗎?不是的...

redis 底層原理之動態字串SDS

既然c語言支援字串,為啥要有sds的出現?c語言的字串的缺點 獲取欄位串的長度為0 n 因為每次都遍歷獲取欄位串的長度大小。strcat 函式來進行兩個字串的拼接,一旦沒有分配足夠長度的記憶體空間,就會造成緩衝區溢位。c字元不能有空字串,否則認為空字串結尾,如 i am boy c字元只能識別到 i...