REDIS中的最佳钥匙哈希



我一直在此处通过Redis网站上阅读有关使用HSET vs SET的文章来创建更优化的内存使用情况:http://redis.io/topics/memory-optimization

我遇到的问题是我的钥匙比这更长。它们的形式是: u:<USER_ID that is 9-16 characters>

示例:

u:123456789
u:123456789abcdefg

在哪里拆分与HSET一起使用的钥匙的最佳位置?

我在这里读到,理想情况下,您的每个"子集"中的项目将不超过1000个项目。因此,在那种情况下,我将按最后3个字符分开,每组中最大的999个项目。

不幸的是,用户ID不是那么可预测的,我不能保证良好的差异。例如,如果我在HSET u:123456 789分开,我不能保证将有所有其他用户ID始于123456填充该集合,这意味着内存不会是优化的。

我该怎么办?

更新:看来您正在误解文章。它是不是关于"使用HSET VS SET"。使用 gentregate 数据类型(哈希,集合,排序集等),而不是单个字符串时,它是关于保存内存的。

在您的情况下,使用哈希而不是字符串是没有意义的,因为您希望每个键都映射到一个字符串。

you 需要,如果您希望保证不会发生碰撞(即,两个用户映射到同一密钥)。

)。

但是,您可以将哈希片碎,并将您的用户放在多个哈希中。

例如,以1-3开头的用户ID将进入第一个哈希,第4-6个进入第二个哈希,第三次以7-9进入第三个等。您可以使用哈希功能来存储和从某些哈希中检索用户。

如果确保您的哈希:

  1. 包含一定的条目限制(请参阅hash-max-ziplist-entries设置)
  2. 仅包含具有尺寸为hash-max-zipmap-value设置的键和值(默认情况下为1024

然后,您可以使用称为 Ziplist的数据结构来保存内存,因为您的哈希是以更高的内存效率存储的。。。

注意:这些相关设置在redis.conf文件中。

最新更新