redis的底層是用c語言來實現的,在c語言中字串的預設是以'\0'
標識結束,而redis並沒有採用這種傳統的方法表示,而是自己構建了一種簡單動態字串(sds)
來表示。
下面看一下什麼是sds
,sds的**定義
,以及在儲存乙個字串"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...