在Redis中,有多少HSET键的键太多了?

时间:2018-01-08 11:51:16

标签: redis

我仔细阅读了https://redis.io/topics/memory-optimization,但我仍然感到困惑。基本上,它表示限制每个哈希映射中的键数(HSET)。但是每个 HSET中的键数呢。

如果我有1,000,000个密钥用于某个前缀。每一个都具有独特的价值。假设它们的整数看起来像"12345689"。如果我通过取前两个字符(例如"12")并将余数作为“子密钥”(例如"3456789")来“分割”密钥,那么对于每个哈希,我将拥有1,000,000 / 100 =每个10,000个键(理论上)。这太多了吗?

我的(默认)配置是:

redis-store:6379> config get hash-*
1) "hash-max-ziplist-entries"
2) "512"
3) "hash-max-ziplist-value"
4) "64"

因此,如果我每个前缀每个1,000,000个密钥,我将小于512 。实际上,我将有100(例如"12""99")。但是每个人呢?理论上每个键有10,000个键。这是否意味着我打破了限制,无法从哈希映射提供的空间优化中受益?

2 个答案:

答案 0 :(得分:2)

您可以使用此公式计算每个密钥的HASH内部数据开销:

3 * next_power(n)* size_of(指针)

n中有HASH个密钥。我认为您使用的是Redis的x64版本,因此size_of(指针)为8.因此,对于HASH中的每10,000个密钥,您将至少有240,000字节的开销。

<强>已更新

请注意hash-max-ziplist-entries 不是银弹。请查看这里的文章Under the hood of Rdis #2 - ziplist可以计算为21 * n并且同时:保存到х10RAM,您的写入速度下降最多可达30次,最多可达100次读取。因此,在HASH中总共有1,000,000个条目,您可以通过性能来捕获关键细分

您可以阅读有关Redis HASH内部Under the hood of Redis #1的更多信息。

答案 1 :(得分:0)

经过一番广泛的研究后,我终于明白hash-max-ziplist-entries是如何运作的。 https://www.peterbe.com/plog/understanding-redis-hash-max-ziplist-entries

基本上,它只是一个哈希映射,或者如果你需要存储多于=choose(--left(a1), "", "", "", "AA", "", "", "BB")&mid(a1, 2, len(a1)) 设置的密钥,你需要将它分解为多个哈希映射。