《REDIS設計與實現》讀書筆記之一 SDS型別

2021-08-21 07:53:42 字數 670 閱讀 5226

sds型別是****** danamic string的縮寫,即為簡單動態字串,redis使用這個型別來替換c語言中的基礎型別char字串,好處顯而易見,c語言程式都很容易理解:減低獲取字串長度的複雜度,防止字串溢位,減少記憶體的分配釋放次數,二進位制安全,相容c標準庫等。

這些都是很容易理解的,c語言程式設計師如果使用記憶體池,多數都會使用相同或者類似的資料結構來完成字串或者二進位制數的儲存,但是我在閱讀完這一章節之後,還是產生了一些小小的疑問的。

1.作為資料庫的基礎資料型別,一般都是採用基本的資料型別,或者類似於基本資料型別的型別來表示資料,redis只用結構型別來儲存資料,如果使用sql語句或者操作命令還進行操作?

2.redis使用sds來儲存資料,雖然從設計的角度看,是有減少分配和釋放動作的設計,但是如果直接呼叫系統介面分配護著釋放記憶體,那麼效能消耗還是會比較大的,我想redis應該也不會這麼設計,理論上來說,還是應該操作預先分配好的記憶體池,而所謂的記憶體分配和釋放,也都是邏輯意義上的分配與釋放而已。

3.redis使用預分配和惰性釋放的方式來減少分配和釋放的次數,這樣的操作雖然可以減少分配釋放次數,但是是否會產生大量的記憶體碎片,因為redis在sds型別上並沒有使用頁面池,這樣頻繁的操作,不管是物理記憶體還是邏輯記憶體,都有可能產生大量的記憶體碎片。

今天學習完《redis設計與實現》第一章,上面的問題希望能在後面的學習中得到解答。

《redis設計與實現》讀書筆記

sds dynamic string 比起 c 字串,sds 具有以下優點 len屬性維護字串長度,常數複雜度即可獲取。預先檢查長度是否滿足需求,如果不滿足自動拓展,杜絕緩衝區溢位。空間預分配 惰性空間釋放會減少修改字串長度時所需的記憶體重分配次數。二進位制安全。相容部分 c 字串函式。list 鍊...

redis設計與實現 讀書筆記1

乙個業務模型引出對redis的好奇 提出問題 1.redis 的五種資料型別分別由什麼資料結構實現?2.redis 的字串型別既可以儲存字串,也可以儲存整數和浮點數,甚至是二進位制位 使用setbit redis 內部是如何實現儲存這些值?3.redis的一部分命令只能對特定的資料型別執行 而另一部...

《redis設計與實現》讀書筆記(一)

定時刪除 惰性刪除 定期刪除 描述一過期立馬刪除 下次獲取時再刪除 每隔一段時間批量刪除 優點對記憶體友好 對cpu時間友好 缺點 對cpu時間不友好 對記憶體不友好 aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態。aof持久化的實現 命令追加 寫命令以協議的格式追加到aof ...