天天看點

Redis的OBJECT指令(翻譯)

檢視原文請點選這裡

OBJECT subcommand [arguments [arguments …]]

2.2.3及以上版本可用

時間複雜度:O(1).

OBJECT指令允許你從内部檢視給定的Redis對象。它對查錯很有幫助,同時也讓你了解某個key使用了何種編碼類型,這對節省存儲空間很有幫助。當使用Redis作為緩存時,你可以依據OBJECT指令擷取的資訊制定key的淘汰政策。

OBJECT指令支援多個子指令:

  • OBJECT REFCOUNT :傳回特定key對應值的引用計數。這個指令主要用于調試。
  • OBJECT ENCODING :傳回特定key對應值的内部編碼方式。
  • OBJECT IDLETIME :傳回特定key的空閑時間(既沒有被讀,也沒有被寫)(譯者注:每當該key被讀/寫時,idletime會重新從0開始計數。),以秒為機關。雖然傳回值以秒為機關,但這個計時器的實際精度是10秒級别,當然這點在未來的版本中有可能改變。隻有當maxmemory-policy被設定為LRU或noeviction時,該子指令才可以使用。

對象可以有多種編碼方式(譯者注:redis中的值都是以内部對象的形式進行存儲的,不同的編碼方式即不同的存儲對象類型):

  • 字串(String)編碼方式為raw(正常的字串編碼方式)或int(為了節省空間,如果一個字串是整數并可以用64位有符号整形來表示,那麼這個字串将以這種方式編碼)。(譯者注:string還有一種編碼方式為embstr,用于存儲39位元組以下的字串。)
  • 連結清單(List)對應的編碼方式為ziplist或者linkedlist。當連結清單較小時會以ziplist方式編碼以節省存儲空間。
  • 集合(Set)對應的編碼方式為intset或者hashtable。當集合較小且隻由整數組成時使用intset編碼。
  • 哈希表(Hashe)對應的編碼方式為ziplist或者hashtable。當哈希表較小時使用ziplist存儲。
  • 有序集合(Sorted Set)對應的編碼方式為ziplist或者skiplist。ziplist編碼可以用于較小的有序集合。skiplist編碼可以用于任何大小的有序集合。

如果你的操作使用得Redis不再能夠使用節省空間的編碼方式(譯者注:比如字串變得很長,集合變得很大。),Redis會自動将其轉化為通用編碼方式。

傳回值

不同的子指令有不同的傳回值。

  • refcount與idletime的傳回值是整數。
  • encoding傳回相應的編碼類型。

    如果檢視的對象不存在,傳回值為空(nil)。

例子

redis> lpush mylist "Hello World"
(integer) 4
redis> object refcount mylist
(integer) 1
redis> object encoding mylist
"ziplist"
//10秒後執行
redis> object idletime mylist
(integer) 10           

複制

一旦目前編碼類型對應的存儲空間不夠,redis将轉換編碼類型。下面的例子對此進行了展示。

redis> set foo 1000
OK
redis> object encoding foo
"int"
redis> append foo bar
(integer) 7
redis> get foo
"1000bar"
redis> object encoding foo
"raw"           

複制