我可以在 Redis 中保存具有相同成员的多个 GeoEntry 还是有其他选择?

Can I save multiple GeoEntry with the same member in Redis or there are alternatives?

我的目标是在 Redis(取自 OSM)上创建一个道路限速缓存,其中使用经纬度搜索位置,returns 使用 GEORADIUS 在一定半径内的限速。

问题在于使用:

GEOADD speed-limits -45.000000 10.000000 "90"

如果我添加一个新仓位,且限制始终为 90,则之前的仓位将被覆盖。

是的。它会被覆盖,因为 90 已经分配了一个值。

一般情况下,您需要谨慎选择密钥。在这种情况下,您可以使用多个分隔符,例如时间戳、随机哈希甚至其他一些有用的信息(比如城市),而不是简单地存储速度限制。

例如,“90”可以转换为 90#1606757564#abcde#city_name

这样,当您查询半径时,您将获得整个密钥。使用简单的 startsWith() 检查来获取原始限制。

你可以

(1) 使用复合键作为成员 所以它是 GEOADD speed-limits -45.000000 10.000000 90:timestamp:location,查询类似于 GEORADIUS speed-limits ... WITHCOORD,然后使用 .split(":")[0] 来获得速度。

(2) 单独存储速度

GEOADD speed-limits -45.000000 10.000000 timestamp:locationSET timestamp:location 90 所以这也是一个两步查询。