我考虑在一个场景中使用redis(出于性能和其他原因),这个场景似乎很容易使用“普通”数据库实现,
但我不知道如何使用redis实现它:
假设我有一堆商店,每个商店都有坐标和属性集,比如“自行车”、“汽车”、“鲜花”、“杂货”:

shop1: lon1, lat1, "bikes", "cars"
shop2: lon2, lat2, "flowers", "groceries"
shop3: lon3, lat3, "flowers", "groceries", "cars", "bikes"
...and etc.

如何以最有效的方式找到离某个点最近的5家商店,这些商店具有“汽车”和“鲜花”的属性?
看起来只需查询某个位置附近的所有商店就很容易了,但是如何筛选出具有特定属性的商店呢?

最佳答案

最简单的方法是为每个类别/方面创建一个集合:

SADD bikes shop1 shop3
SADD cars shop1 shop3
SADD flowers shop2 shop3
SADD groceries shop2 shop3

执行GEORADIUS ... STORE <some-temporary-key>,然后可以调用SINTER <some-temporary-key> cars flowers来回答您的查询。
请注意,“最简单”并不一定意味着最有效,但这是另一回事。另一种方法是使用RediSearch

关于redis - 具有多种条件的GEO查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52871410/

10-10 04:39