Redis簡單動態(tài)字符串

2018-08-02 14:35 更新

Redis簡單動態(tài)字符串

Redis 沒有直接使用 C 語言傳統(tǒng)的字符串表示(以空字符結(jié)尾的字符數(shù)組,以下簡稱 C 字符串), 而是自己構(gòu)建了一種名為簡單動態(tài)字符串(simple dynamic string,SDS)的抽象類型, 并將 SDS 用作 Redis 的默認字符串表示。

在 Redis 里面, C 字符串只會作為字符串字面量(string literal), 用在一些無須對字符串值進行修改的地方, 比如打印日志:

redisLog(REDIS_WARNING,"Redis is now ready to exit, bye bye...");

當 Redis 需要的不僅僅是一個字符串字面量, 而是一個可以被修改的字符串值時, Redis 就會使用 SDS 來表示字符串值: 比如在 Redis 的數(shù)據(jù)庫里面, 包含字符串值的鍵值對在底層都是由 SDS 實現(xiàn)的。

舉個例子, 如果客戶端執(zhí)行命令:

redis> SET msg "hello world"
OK

那么 Redis 將在數(shù)據(jù)庫中創(chuàng)建了一個新的鍵值對, 其中:

  • 鍵值對的鍵是一個字符串對象, 對象的底層實現(xiàn)是一個保存著字符串 "msg" 的 SDS 。
  • 鍵值對的值也是一個字符串對象, 對象的底層實現(xiàn)是一個保存著字符串 "hello world" 的 SDS 。

又比如說, 如果客戶端執(zhí)行命令:

redis> RPUSH fruits "apple" "banana" "cherry"
(integer) 3

那么 Redis 將在數(shù)據(jù)庫中創(chuàng)建一個新的鍵值對, 其中:

  • 鍵值對的鍵是一個字符串對象, 對象的底層實現(xiàn)是一個保存了字符串 "fruits" 的 SDS 。
  • 鍵值對的值是一個列表對象, 列表對象包含了三個字符串對象, 這三個字符串對象分別由三個 SDS 實現(xiàn): 第一個 SDS 保存著字符串 "apple" , 第二個 SDS 保存著字符串 "banana" , 第三個 SDS 保存著字符串 "cherry" 。

除了用來保存數(shù)據(jù)庫中的字符串值之外, SDS 還被用作緩沖區(qū)(buffer): AOF 模塊中的 AOF 緩沖區(qū), 以及客戶端狀態(tài)中的輸入緩沖區(qū), 都是由 SDS 實現(xiàn)的, 在之后介紹 AOF 持久化和客戶端狀態(tài)的時候, 我們會看到 SDS 在這兩個模塊中的應(yīng)用。

本章接下來將對 SDS 的實現(xiàn)進行介紹, 說明 SDS 和 C 字符串的不同之處, 解釋為什么 Redis 要使用 SDS 而不是 C 字符串, 并在本章的最后列出 SDS 的操作 API 。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號