如何在Redis中反向查找?

Rya*_*sse 5 nosql redis

是否可以使用Redis通过键OR值进行查找?我需要存储电子邮件地址的主列表,为每个地址分配一个UUID,但能够使用其他数据找到ID或地址。我找不到确定的“是”或“否”。任何示例将不胜感激。

ube*_*dog 5

您需要创建 2 个哈希图:

  1. 从 UUID 到电子邮件的哈希映射 (uuid_to_email)
  2. 从电子邮件到 UUID 的哈希映射 (email_to_uuid)

例如:

> hset uuid_to_email 39315120-9581-11e3-9c4e-0002a5d5c51b foo@bar.com
> hset email_to_uuid foo@bar.com 39315120-9581-11e3-9c4e-0002a5d5c51b
Run Code Online (Sandbox Code Playgroud)

然后,要检索该值,请使用从您拥有的值映射的哈希图。如果您有 UUID,请使用 uuid_to_email:

> hget uuid_to_email 39315120-9581-11e3-9c4e-0002a5d5c51b
"foo@bar.com"
Run Code Online (Sandbox Code Playgroud)

如果您有电子邮件,请使用 email_to_uuid:

> hget email_to_uuid foo@bar.com
"39315120-9581-11e3-9c4e-0002a5d5c51b"
Run Code Online (Sandbox Code Playgroud)

  • @ItamarHaber 这绝对是不正确的。例如,Instagram [在 HashMap 中存储数亿条记录](http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs )。从该博文中可以看出,“我们需要保留大约 3 亿张照片到创建它们的用户 ID 的映射......我们向总是乐于助人的 Redis 核心开发人员之一 Pieter Noordhuis 寻求意见,他建议我们使用 Redis 哈希。” 它不仅是可能的,而且是存储大量数据的最有效方法。 (3认同)
  • 哈希值的设计目的不是保存大量项目,因此这种方法仅在用例大约有数百个地址时才有效。 (2认同)
  • @uberdog 请原谅我的英语,Instagram 不会在 HASH 映射中存储超过 1000 条记录,它们将记录 id 除以 1000(并丢弃其余部分)并使用结果值来设置 HASH 名称。 (2认同)