Redis从Value获得Key

时间:2017-04-17 09:38:02

标签: redis key-value nosql

ID是唯一的,我将其用作密钥,剩余的作为Redis数据库中的哈希值。如果我给出一个特定的城市名称,我正在寻找一个返回ID列表的查询。例如,如果我问,给我所有名为SPRINGFIELD的城市的ID,它应该返回给我01103和01104。

{ "_id" : "01103", "city" : "SPRINGFIELD", "loc" : [ -72.588735, 42.1029 ], "pop" : 2323, "state" : "MA" }

{ "_id" : "01104", "city" : "SPRINGFIELD", "loc" : [ -72.577769, 42.128848 ], "pop" : 22115, "state" : "MA" }

{ "_id" : "01106", "city" : "LONGMEADOW", "loc" : [ -72.5676, 42.050658 ], "pop" : 15688, "state" : "MA" }

4 个答案:

答案 0 :(得分:2)

您没有指定在Redis中使用哪个键来映射到城市的哈希结构,因此我假设您使用ID,因为您说它是唯一的。

要查询匹配特定名称的城市,您需要构建和维护支持查询的辅助索引结构。一种方法是使用SET数据结构,并使用城市名称作为键,指向共享该城市名称的ID集。

答案 1 :(得分:2)

Redis不支持开箱即用查询数据。它基本上是一个简单的键值存储,其值是数据结构,如Lists,Hashtables e.t.c。

解决方法是创建一个单独的ID列表或哈希表,并将其存储在Redis中。您需要维护添加或删除的任何新ID的列表。

如果查询至关重要,那么您最好转向distributed cache NCache或其他支持querying your data的缓存产品。

答案 2 :(得分:0)

有一种方法可以实现此目标,即建立索引的概念。索引的使用方式可以帮助您实现

  ZADD myindex 25 Manuel
  ZADD myindex 18 Anna
  ZADD myindex 35 Jon
  ZADD myindex 67 Helen

为了检索所有年龄在20到40岁之间的人,可以使用以下命令:

ZRANGEBYSCORE myindex 20 40
1) "Manuel"
2) "Jon"

如果您想了解更多信息,请使用此官方文档https://redis.io/topics/indexes

答案 3 :(得分:0)

这正是RediSearch设计的目的。