我可以在 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:location
和 SET timestamp:location 90
所以这也是一个两步查询。
我的目标是在 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:location
和 SET timestamp:location 90
所以这也是一个两步查询。