2015-03-31 19 views
0

我試圖在redis中插入key-「value」。「value」是X字節,同時將我的應用程序插入到redis中。我想知道在從./redis-cli發出「INFO」命令後要監視哪個參數,以檢查在redis中是否使用了X(或者可能是X + somevalue,如果redis填充了某些數據)字節數。以確定我的應用程序所需的maxmemory(redis.conf)參數。redis.conf中的maxmemory參數

我有一個主人和一個哨兵,並使用redis臨時storage.I已嘗試監視used_memory參數。但根據我得到的數據,似乎maxmemory與used_memory無關。

所以相反,我想使用「調試對象Mykey」,它給出了序列化長度。這個長度究竟是什麼,我在redis文檔中找不到任何描述。

所以基本上兩個問題:

  1. 是maxmemory和used_memory有關,如果是,那麼是有一些趕上使用used_memory來計算插入的鍵值所佔用的空間。

  2. 什麼是在「調試對象的myKey」命令

回答

0
  1. maxmemory配置指令決定了Redis的應被允許使用用於用戶數據的存儲器的最大量serializedlength。當設置爲0(默認值)時,只要底層操作系統允許,Redis將分配內存。 INFO命令中的used_memory值是在調用該命令時用戶數據消耗的實際內存。兩者之間的關係(只要maxmemory不是0)是used_memory < = maxmemory

  2. DEBUG OBJECT輸出的serializedlength是序列化時存儲在該密鑰下的值的長度(字節大小)。要獲得實際的序列化值,可以使用DUMP命令。請注意,序列號長度爲並不是提供了由於無數因素(包括Redis對數據結構和開銷的編碼)而導致密鑰使用的實際內存量的準確度量。

一般情況下,爲了獲取您maxmemory設置的估計,儘量保存一些100S能代表你的數據(例如1000)鍵,檢查used_memory後來,劃分值,然後乘以結果通過安全餘量的預期密鑰數量(例如至少10%)。

+0

「INFO命令中的used_memory值是調用該命令時用戶數據消耗的實際內存。」 命令完成後用戶數據消耗的內存是否更改? 只是爲了澄清你所暗示的是假設我在Redis中插入X鍵。我應該用X分開user_memory,結果應該給我每個鍵使用的內存。 另外我注意到,即使沒有命令發佈到redis(不知道爲什麼),used_memory大約爲370 kb。當使用「used_memory」來估計「maxmemory」時,這也需要一些會計? – user2713255 2015-03-31 18:24:58

+0

'INFO'不影響內存使用。當然,你對370kb的開銷是正確的,而且可能略有不同。通常情況下,當你把一些數據放進去時,它就變得微不足道了。你有正確的劃分,但記住它只是一個粗略的估計。你可以做更多/更大的迭代,以更好地感受數字。 – 2015-04-01 21:19:07

+0

客戶端輸出緩衝區的大小如何?如果考慮到這一點,那麼我們將需要估計我們服務的客戶端數量和平均客戶端輸出緩衝區大小。 那麼這個值也應該被添加來估計maxmemory? – user2713255 2015-04-04 20:42:20

相關問題