2016-09-01 147 views
3

Redis命令HMSET字段的最大數量限制是多少?如果我通過HMSET將100000個字段設置爲一個密鑰,如果將每個字段用作密鑰,會導致性能問題。Redis命令HMSET有字段限制嗎?

回答

3

它是相當大的,2^64-1在64位系統,和2^32 -1在32位系統, https://groups.google.com/d/msg/redis-db/eArHCH9kHKA/UFFRkp0iQ4UJ

1)中每一個的Redis數據庫鍵數:2^64-1位64位系統。 32位系統中的2^32-1。 2)每個散列中的散列字段數:在64位系統中的012 ^2^64-1。 32位系統中的2^32-1。

鑑於32位實例具有最大4GB的可尋址空間,因此 限制無法訪問。對於64位實例,給定2^64-1有多大,這個限制是不可達的。

因此,對於每一個實際的角度來看,考慮鍵和散列只有 受限於RAM的數量。

薩爾瓦託雷

+0

好信息 – Jason

2

根據Redis documentation,沒有這樣的限制。

其實你可以把一個哈希裏面的字段數量沒有實際的限制(除了可用內存等)

我覺得有沒有性能損失將數據保存在一個HASH。但是,如果您有一個非常大的HASH,撥打HGETALL總是一個壞主意。因爲HGETALL會返回HASH的所有字段和值,並且在HASH非常大時會長時間阻止Redis實例。

HASH是否比鍵值存儲更好,很大程度上取決於您的場景。

+0

如此100000關鍵性能和值對幾乎是相同的一個關鍵和100000字段與散列? – Jason

+0

@Jason是的,表現幾乎相同。理論上講,HASH可能會比較慢,因爲Redis首先需要搜索關鍵字索引,然後搜索'HASH'字段索引(2個索引搜索VS 1索引搜索)。但是,索引搜索速度非常快,您可以忽略差異。我曾經做過類似的測試,性能幾乎相同。 –

+0

明白了,謝謝您的信息。 – Jason

3

我做了幾個快速測試此使用lua的客戶端。

我試圖用一個單一的hmset命令,個人hmset命令存儲10萬場,和流水線各個命令,並定時他們花了多長時間來完成:

hmset 100000個領域:3.164817

hmset各個字段: 9.564578

hmset管道:4.784714

爲1,000,000所花時間太長,但代碼是在這裏,如果你想鼓搗我沒有嘗試更大的值。 https://gist.github.com/kraftman/1f15dc75649f07ee044eccab5379a8e3

根據心目中的應用程序記住,你失去哈希的存儲效率,一旦你添加太多的字段(「太多」可以設置,見here更多信息。

+0

謝謝你的測試,但是我的場景是一個關鍵字和10000個字段。 – Jason

+0

我想我使用了錯誤的術語:我設置了一個關鍵字'newhash',包含100,000個字段,我將編輯我的答案。 –