Redis的小书解释了如何通过电子邮件地址查找用户ID,以便您可以按用户ID查找用户哈希并获取完整的用户对象。它实际上是通过电子邮件地址对用户的索引。您只需在每次插入新用户时添加到查找哈希:
set users:9001 "{id: 9001, email: leto@dune.gov, ...}"
hset users:lookup:email leto@dune.gov 9001
在我看来,这个操作涉及一个隐藏的查找,Redis必须执行该查找以获取所需电子邮件字段的值。可能有数千个电子邮件字段,我们只要求其中一个。
如何在索引键中使用电子邮件:
set users:9001 "{id: 9001, email: leto@dune.gov, ...}"
set users:lookup:email:leto@dune.gov 9001
因为Redis的小书中没有提到这个,我认为这不是最佳实践。
任何人都可以解释为什么第一种方法更好?它们实际上是一样的吗?
谢谢,我正在学习Redis。
答案 0 :(得分:5)
正如我所看到的,每种方法都有其自身的优点和缺点:
哈希方法:
关键方法:
KEY
获取所有用户的列表,这是O(n)(对于数据库中的每个条目 - 对于实时环境来说是一个很大的禁忌)这些是我能想到的所有差异。我倾向于倾向于关键方法,除非我需要出于某种原因列出所有用户,因为它更直接并且通过分片更好地扩展。
顺便说一句,如果可以避免使用JSON数据,我可能不会将其存储为用户数据,因为将字段存储在哈希中可能会更节省内存。此外,您可以获取并设置您真正需要某个点的字段,而不是整个blob。也可以在没有事务的情况下以原子方式对哈希进行增量,这可能很有用。但这一切都取决于你的数据......如果你有一个大的嵌套结构,最简单的方法是将它序列化并将其抛入其中而不是创建许多不同的本机结构并将它们链接在一起。