2017-06-07 89 views
0

在我們redis的簇,Redis集羣實例比獨立實例消耗更多內存?

  • 主節點(redis的3.2.7與jemalloc 3.6.0,安裝在使用蔭,黃線)所使用的內存
  • 從節點2.240G(3.2.7 redis的與jemalloc 3.6.0,安裝在使用蔭,青色線)所使用的內存1.735G
  • 從節點(redis的3.2.9與jemalloc 4.0.3,從源代碼編譯,橙色線)所使用的內存
  • 1.531G
  • 一個獨立的slave(redis 3.2.9,帶有jemalloc 4.0.3,從源碼編譯,綠色的l )使用1.008G的內存

使用較新版本的內存分配器可節省大約12%的內存。這很容易理解。但是,在集羣從節點的情況下,與獨立實例相比,內存使用量增加了50%?

enter image description here

+1

數據庫中有很多小密鑰嗎? Redis羣集使用一個表將羣集中的每個密鑰映射到其指定的插槽,這會增加開銷,並且您擁有的密鑰越多,開銷就越大。在redis 4.0中,保存這些鍵的數據結構已經過優化,可以減少內存並提高速度。 –

+1

在拍攝快照時,我們擁有超過500萬個密鑰,密鑰長度爲33個字節,平均值長度約爲58個字節。所以密鑰槽映射表很可能是問題的原因。謝謝,@Not_a_Golfer – thirstycrow

+0

我會讓它成爲未來幾代人的答案。 –

回答

2

Redis的集羣使用的內部表,映射集羣中到其指定的時隙,這增加了開銷每個鍵。

而且你擁有的鑰匙越多,開銷就越大。所以特別是如果你有很多很多小鍵盤,這是非常明顯的,甚至可以減緩RDB的數據保存和加載。

在redis 4.0中,保存這些密鑰的數據結構已經過優化,可以減少內存並提高速度。供參考 - https://github.com/antirez/redis/issues/3800