Redis String型別內部資料結構

2021-10-08 11:52:58 字數 808 閱讀 7230

redis的字串儲存結構叫sds(****** dynamic string),結構如下

struct sds

儲存結構:

長度小的時候使用embstr,長度大的時候使用raw,大小的分界線是 44。

為什麼是44?首先我們一起來分析下redisobject物件頭。

struct redisobject  robj;
redis物件頭占用4bits+4bits+24bits+4bytes+8bytes=16bytes

再來看下sds結構,

struct sds
sds結構至少占用1byte+1byte+1byte=3bytes

以上可知:分配乙個字串的最小空間占用為16bytes+3bytes=19bytes。

在記憶體分配器 jemalloc/tcmalloc 中,分配記憶體大小的單位都是 2、4、8、16、32、64 等,為了容納乙個完整的embstr物件,至少分配32位元組的空間。

如果總體超過了64位元組的空間,那麼我們認為就是乙個大的字串了,就使用raw來儲存了。

sds結構體中的字串

又因為字串以\0結尾,所以embstr最大能容納的字元創長度為64-19-1=44bytes。

Redis string型別的操作

設定key的值 set key value 設定多個key mset key1 value1 key2 value2 keyx valuex 獲取key get key 獲取多個key mget key1 key2.keyx 指定key的字串追加value 擷取key的字串 包括開始位置和結束位置 ...

redis String資料型別

1 set 設定乙個key value 2 get 根據key獲得對應的value 127.0.0.1 6379 set name hello ok127.0.0.1 6379 get name hello 127.0.0.1 6379 3 mset 一次設定多個key value 4 mget 一...

Redis string型別常用操作

redis 有 string list set zset hash資料型別。string型別是最基礎的,其他型別都是在string型別上去建立的,所以了解熟悉string型別的常用操作對於學習redis非常必要。127.0.0.1 6379 7 get hello world integer 141...