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" }
答案 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设计的目的。