W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Redis 沒(méi)有直接使用 C 語(yǔ)言傳統(tǒng)的字符串表示(以空字符結(jié)尾的字符數(shù)組,以下簡(jiǎn)稱 C 字符串), 而是自己構(gòu)建了一種名為簡(jiǎn)單動(dòng)態(tài)字符串(simple dynamic string,SDS)的抽象類型, 并將 SDS 用作 Redis 的默認(rèn)字符串表示。
在 Redis 里面, C 字符串只會(huì)作為字符串字面量(string literal), 用在一些無(wú)須對(duì)字符串值進(jìn)行修改的地方, 比如打印日志:
redisLog(REDIS_WARNING,"Redis is now ready to exit, bye bye...");
當(dāng) Redis 需要的不僅僅是一個(gè)字符串字面量, 而是一個(gè)可以被修改的字符串值時(shí), Redis 就會(huì)使用 SDS 來(lái)表示字符串值: 比如在 Redis 的數(shù)據(jù)庫(kù)里面, 包含字符串值的鍵值對(duì)在底層都是由 SDS 實(shí)現(xiàn)的。
舉個(gè)例子, 如果客戶端執(zhí)行命令:
redis> SET msg "hello world"
OK
那么 Redis 將在數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)新的鍵值對(duì), 其中:
"msg"
的 SDS 。"hello world"
的 SDS 。又比如說(shuō), 如果客戶端執(zhí)行命令:
redis> RPUSH fruits "apple" "banana" "cherry"
(integer) 3
那么 Redis 將在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)新的鍵值對(duì), 其中:
"fruits"
的 SDS 。"apple"
, 第二個(gè) SDS 保存著字符串 "banana"
, 第三個(gè) SDS 保存著字符串 "cherry"
。除了用來(lái)保存數(shù)據(jù)庫(kù)中的字符串值之外, SDS 還被用作緩沖區(qū)(buffer): AOF 模塊中的 AOF 緩沖區(qū), 以及客戶端狀態(tài)中的輸入緩沖區(qū), 都是由 SDS 實(shí)現(xiàn)的, 在之后介紹 AOF 持久化和客戶端狀態(tài)的時(shí)候, 我們會(huì)看到 SDS 在這兩個(gè)模塊中的應(yīng)用。
本章接下來(lái)將對(duì) SDS 的實(shí)現(xiàn)進(jìn)行介紹, 說(shuō)明 SDS 和 C 字符串的不同之處, 解釋為什么 Redis 要使用 SDS 而不是 C 字符串, 并在本章的最后列出 SDS 的操作 API 。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: