Redis' strings

Redis字符串基本操作命令

命令 行為
GET 獲取給定建對應(yīng)的值
SET 設(shè)置給定建對應(yīng)的值
DEL 刪除給定建對應(yīng)的值
INCR 值+1
DECR 值-1
INCRBY 值+N N為整數(shù)
DECRBY 值-N N為整數(shù)
INCRBYFLOAT 值+N N為浮點數(shù)

底層實現(xiàn)

Redis中,字符串對象是一個基礎(chǔ)對象,所有鍵值均是字符串對象。Redis自己構(gòu)建了一種名為簡單動態(tài)字符串(simple dynamic string,SDS)的抽象類型,并將SDS用作Redis的默認(rèn)字符串表示。
SDS的結(jié)構(gòu)體表示為:
struct sdshdr { int len; int free; char buf[]; };
其中l(wèi)en屬性記錄buf數(shù)組中已使用字節(jié)的數(shù)量,free則記錄buf數(shù)組中未使用字節(jié)的數(shù)量,buf數(shù)組本身則存儲字符中的字節(jié)。
SDS遵循C字符串以空字符結(jié)尾的慣例,保存空字符的1字節(jié)空間,不計入len屬性中

SDS的優(yōu)勢

  • 獲取字符串長度代價小,時間復(fù)雜度僅為O(1),而C字符串則為O(N)
  • 防止緩沖區(qū)溢出,可以檢查內(nèi)存空間容量,并自動擴(kuò)容
  • 減少改變buf數(shù)組的長度時帶來的內(nèi)存重分配次數(shù)(預(yù)分配與惰性空間釋放)
  • 二進(jìn)制安全(SDS通過len屬性判斷字符串是否結(jié)束,而不是空字符)
  • 兼容部分C字符串API
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容