Redis命令HMSET的字段是否有任何数量限制?

时间:2016-09-01 07:18:17

标签: redis

Redis命令HMSET的字段最大数量限制是多少?如果我通过HMSET将100000个字段设置为一个密钥,那么是否会导致性能问题比较使用每个字段作为密钥?

3 个答案:

答案 0 :(得分:4)

它非常大,在64位系统中为2 ^ 64-1,在32位系统中为2 ^ 32 -1, https://groups.google.com/d/msg/redis-db/eArHCH9kHKA/UFFRkp0iQ4UJ

  

1)每个Redis数据库中的密钥数:64位系统中的2 ^ 64-1。   32位系统中的2 ^ 32-1。 2)每个哈希中的哈希字段数:   64位系统中的2 ^ 64-1。 32位系统中的2 ^ 32-1。

     

假设32位实例的可寻址空间最大为4GB,那么   限制无法到达。对于64位实例,给定2 ^ 64-1有多大,   限制无法到达。

     

因此,对于每个实际观点,只考虑键和哈希   受到你的RAM量的限制。

     

的Salvatore

答案 1 :(得分:4)

我使用lua客户端对此进行了几次快速测试。

我尝试使用单个hmset命令,单个hmset命令和流水线单个命令存储100,000个字段,并计算完成所需的时间:

hmset 100000字段:3.164817

hmset个别字段:9.564578

管道中的hmset:4.784714

我没有尝试更大的值,因为1,000,000+花了太长时间,但如果你想修补,代码就在这里。 Halloween Problem

根据应用程序的不同,请记住,一旦添加太多字段,就会失去哈希的存储效率(可以设置“太多”,请参阅https://gist.github.com/kraftman/1f15dc75649f07ee044eccab5379a8e3以获取更多信息。

答案 2 :(得分:3)

根据Redis documentation,没有这样的限制。

  

实际上,您可以放入哈希中的字段数没有实际限制(可用内存除外)

我认为在HASH中保存数据没有性能损失。但是,如果你有一个非常大的HASH,那么拨打HGETALL总是一个坏主意。因为HGETALL会返回HASH的所有字段和值,并且在HASH非常大的情况下会长时间阻止Redis实例。

HASH是否优于键值存储,在很大程度上取决于您的方案。