Redis可以直接用作鍵值存儲,其值爲字符串。或者,以更復雜的方式,該值可以是數據結構,例如散列或列表。假設我們有第二種情況,並且在關鍵字「H」下面,有一個散列。項目可以添加到散列並刪除。最終,散列可以是空的,並且可以再次重新填充。保留Redis中的空數據密鑰
我發現如果我們從數據結構中刪除最後一項,我們的散列「H」,Redis會將它從當前鍵中刪除,出於某種原因。
例子:
HSET "H" "key1" "value1"
HSET "H" "key2" "value2"
HDEL "H" "key1"
<-- Here, "H" is in the list of current keys, whereby HLEN returns 1
HDEL "H" "key2"
<-- Here, for some reason, "H" is not shown among existing keys,
not even as an empty hash (HLEN 0)
HSET "H" "key3" "value3"
<-- Hash is back in the list of keys
我的問題是:是否有可能配置的Redis所以它仍然繼續顯示給定的密鑰(「H」的值(空哈希,在我們的例子),在我們的例如)作爲一個空的非平凡的數據結構?
我想要的是在Redis中監視各種哈希的長度。我正在使用statsd,但沒關係。重點是,每分鐘,我將所有_existing_ Redis結構(哈希)的長度轉儲到statsd。哈希的名稱是動態的,這就是爲什麼我不能列舉它們。我需要運行「KEYS Hash- *」然後遍歷這些。但是,如果散列消失了,我在statsd中有最後一個非零值,但應該用零代替 - 顯然,空散列的長度爲零。 –
沒有直接執行此操作的命令,但可以執行某些操作。首先,停止使用KEYS,因爲它非常低效。從redis 2.8開始,您可以使用SCAN,它更加高效,專門爲需要處理動態密鑰的用戶設計。 –
我剛剛改進了我的答案,包括我提出的解決方案 –