给定这个例子:
user:1 email bob@bob.com
user:1 name bob
根据我的研究,所有示例都创建了一个类似于以下内容的“索引”:
user:bob@bob.com 1
我的问题是:将它存储为“用户:1”不是更好吗?这将消除在代码中连接字符串的需要。还有其他原因不存储整个字符串吗?可能是内存?
给定这个例子:
user:1 email bob@bob.com
user:1 name bob
根据我的研究,所有示例都创建了一个类似于以下内容的“索引”:
user:bob@bob.com 1
我的问题是:将它存储为“用户:1”不是更好吗?这将消除在代码中连接字符串的需要。还有其他原因不存储整个字符串吗?可能是内存?
问题专门关于将完整键存储在索引中,或者只是作为该键一部分的数字 ID。
Redis 有许多内存优化,您可能希望利用这些优化来减少一般内存消耗。这些优化之一是 intset(一种表示整数集的有效结构)。
很多时候,集合用作索引条目,在这种情况下,存储数字 ID 而不是字母数字键要好得多,以从 intset 优化中受益。
您的示例略有不同,因为给定的电子邮件地址应仅与一个用户相关联。唯一的哈希对象可以存储整个索引。我仍然会在这里使用数字 ID,因为它更紧凑,并且可能会受益于未来的 Redis 优化。
根据您到目前为止所传达的内容,我将使用 Redis 哈希。例如,我会对数据进行一些非规范化,并将其存储为hmset users:1 email bob@bob.com name Bob
“hset users:lookup:email bob@bob.com 1”。
这样,我可以使用他的电子邮件 ID 或用户 ID 来检索用户。您可以根据需要创建更多查找哈希。
有关更多有用的模式,请查看由 Salvatore Sanfilippo 本人撰写的Little Redis 书。