2014-09-30 30 views
-1

爲什麼我從下面得到「原始」結果?Redis內部表示

redis 127.0.0.1:6379> set massage "hello" OK redis 127.0.0.1:6379> object encoding massage "raw"

是否有什麼關係?

#define REDIS_ENCODING_EMBSTR_SIZE_LIMIT 39

回答

1

39是決定是否嵌入與否。如果你看一下代碼的確切件,其中定義是它可以解釋這一切:

https://github.com/antirez/redis/blob/73a809b1591378e1042a1028d0b8e10217e6e7c7/src/object.c#L87

至於這是所有你所說的字符串,該類型的原料,如果它是一個有效的數字表示法它是一個Int。

例子:

127.0.0.1:6379> set str "hello" 
OK 
127.0.0.1:6379> object encoding str 
"raw" 
127.0.0.1:6379> set int 1 
OK 
127.0.0.1:6379> object encoding int 
"int" 
127.0.0.1:6379> lpush list hello 
(integer) 1 
127.0.0.1:6379> object encoding list 
"ziplist" 
127.0.0.1:6379> zadd zset 1 1 
(integer) 1 
127.0.0.1:6379> object encoding zset 
"ziplist" 
127.0.0.1:6379> sadd set 1 
(integer) 1 
127.0.0.1:6379> object encoding set 
"intset" 
127.0.0.1:6379> hset hash field value 
(integer) 1 
127.0.0.1:6379> object encoding hash 
"ziplist" 

正如你可以看到這是如何的對象內部表示對Redis的。

如果你想要的實際類型,你可以嘗試type命令。

P.S.請下次再提出你的問題。也許值得添加參考資料,看看你看過的地方。你不能簡單地絆倒那define

+0

這是一個非常好的答案。但這也是一個非常好的問題,儘管可能不是很像SO。因爲它詢問「爲什麼」。 – 2014-09-30 22:27:23

+0

是的,我確實知道。從問題的形式來看,我認爲這並不意味着被問及的方式。但你是正確的:-) – 2014-09-30 22:29:37

+0

讓我們沿着「什麼是原始編碼」這一行編輯問題?我確定這就是這個意思。 :) – 2014-09-30 22:32:29