Redis命令HMSET的字段最大数量限制是多少?如果我通过HMSET将100000个字段设置为一个密钥,那么是否会导致性能问题比较使用每个字段作为密钥?
答案 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
是否优于键值存储,在很大程度上取决于您的方案。