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