Redis學習筆記01-字元串對象

  • 2020 年 1 月 22 日
  • 筆記

底層實現

編碼可以是int、raw、embstr

整數值

  • 編碼為int
  • 整數值,可以用long類型來表示
  • ptr屬性中直接保存

字元串結構

使用redisObject結構和sdshdr結構,有raw、embstr兩種編碼、

embstr

  • 字元串值的大小小於等於32位元組
  • 通過調用一次記憶體分配函數來分配一塊連續的空間
  • 用來保存短字元串對象的好處:
    • 1)將創建字元串對象所需的記憶體分配次數從raw編碼的兩次降低為一次。
    • 2)釋放embstr編碼的字元串對象只需要調用一次記憶體釋放函數,raw需要調用兩次。
    • 3)所有數據都保存在一塊連續的記憶體里,所以這種編碼的字元串對象比raw編碼的對象能更好的利用快取帶來的優勢。
  • 實際上是只讀的

raw

  • 字元串值的長度大於32位元組
  • 調用兩次記憶體分配函數來分別創建redisObject結構和sdshdr結構

注意

可以用long double類型表示的浮點數在Redis中也是作為字元串值來保存的。

  • 將浮點數保存到字元串對象中時,先轉換為字元串值
  • 再保存轉換所得的字元串值

int編碼的字元串對象和embstr編碼的對象在條件滿足的情況下會被轉換成raw編碼的字元串對象。

  • 對於init編碼的字元串:若向對象執行一些命令,使得該對象保存的不再是整數值,而是一個字元串值,那麼字元串對象的編碼將從int轉為raw。
  • 對於embstr編碼的字元串對象:執行任何修改命令時,程式會先將對象的編碼從embstr轉換為raw,然後執行修改命令。因此,總會變成一個raw編碼的字元串對象。

字元串對象是Redis五種對象中唯一一種會被其他四中類型對象嵌套的對象。

基礎命令

暫時不過多展開。

  • 創建: SET Key Value
  • 獲取:GET Key

參考資料

《Redis設計與實現》

Tags: