我在Redis中運行實驗來測試大型密鑰的內存使用情況。我加載了16 Million字符串 與50-60個字符(字節),大致將802 MB在磁盤上轉換爲Redis中的排序集。它 用完(臃腫到)3.12 GB的內存這個排序集。Redis Data Structures使用大量內存
然後我裝16個百萬短字符串(10-12個字符)佔據220 MB的磁盤上的空間 到另一個有序集合仍然用完2.5 GB的RAM。很顯然,磁盤空間使用量的減少量爲 非常高(減少了72%),但Redis排序集仍然使用大型字符串使用的相當大量的內存。
Redis哈希也是這種情況(短字符串佔用了長字符串使用的內存的80%)。 Redis數據結構使用的內存是否僅依賴於數據結構中的元素個數(排序集或散列),而不是每個元素的長度(這很自然地認爲是這樣 - 較短的字符串=>較小的內存)?
這將是巨大的,如果我能理解爲什麼
1600萬的長字符串使用了幾乎相同的空間,16萬個短噸串
在有序集合,如果有什麼我可以做的,以減少短字符串 (任何內存優化)佔用的內存?
快速(無回答)分析;數據大小的差異大約是600MB,內存需求的差異大約是600m,因此您添加的字符串數量似乎存在大約2.3GB的非字符串長度相關常數因子。 – 2013-02-17 08:22:10
非字符串長度相關因子似乎並不恆定,它取決於數據結構中非常糟糕的元素數量,因爲它在數據結構變大(元素數量增多)時增長! – 2013-02-17 09:01:52