Redis索引:存储完整密钥与ID

时间:2012-07-05 04:44:01

标签: redis

给出这个例子:

user:1 email bob@bob.com
user:1 name bob

根据我的研究,所有示例都创建了一个类似于以下内容的“索引”:

user:bob@bob.com 1

我的问题是:将它存储为“user:1”不是更好吗?这将消除在代码中连接字符串的需要。有没有其他理由不存储整个字符串?记忆可能吗?

2 个答案:

答案 0 :(得分:3)

问题特别是关于将完整密钥存储在索引中,还是仅存储在此密钥中的数字ID。

Redis有一些memory optimizations,您可能希望利用它来减少一般内存消耗。其中一个优化是intset(表示整数集的有效结构)。

通常,集合用作索引条目,在这种情况下,存储数字ID而不是字母数字键要好得多,以便从intset优化中受益。

您的示例略有不同,因为给定的电子邮件地址应仅与一个用户相关联。一个唯一的哈希对象可以存储整个索引。我仍然会在这里使用数字ID,因为它更紧凑,可能会受益于未来的Redis优化。

答案 1 :(得分:0)

根据你到目前为止所传达的内容,我会使用Redis哈希。例如,我将数据反规范化,存储为hmset users:1 email bob@bob.com name Bob和'hset users:lookup:email bob@bob.com 1'。

这样,我可以使用他的电子邮件ID或用户ID来检索用户。您可以根据需要创建更多查找哈希值。

有关更有用的模式,请查看由Salvatore Sanfilippo本人撰写的Little Redis book