我的目标是在redis上创建一个道路限速缓存(取自osm),在那里用经纬度搜索位置,用georadius返回某个半径的限速。问题是使用:
GEOADD speed-limits -45.000000 10.000000 "90"
如果我添加了一个新的位置,并且始终限制为90,那么上一个位置将被覆盖。
jucafojl1#
对。它会被覆盖因为 90 已指定值。一般来说,你需要仔细选择你的钥匙。与简单地存储速度限制不同,您可以使用多个分隔符,例如时间戳、随机哈希,甚至是一些其他有用的信息(比如城市),在这种情况下使用限制。例如,“90”可以转换为 90#1606757564#de#city_name .这样,当您查询半径时,您将得到整个键。使用简单的 startsWith() 检查以获得原始限制。
90
90#1606757564#de#city_name
startsWith()
drnojrws2#
你也可以(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 所以这也是一个两步查询。
GEOADD speed-limits -45.000000 10.000000 90:timestamp:location
GEORADIUS speed-limits ... WITHCOORD
.split(":")[0]
GEOADD speed-limits -45.000000 10.000000 timestamp:location
SET timestamp:location 90
2条答案
按热度按时间jucafojl1#
对。它会被覆盖因为
90
已指定值。一般来说,你需要仔细选择你的钥匙。与简单地存储速度限制不同,您可以使用多个分隔符,例如时间戳、随机哈希,甚至是一些其他有用的信息(比如城市),在这种情况下使用限制。
例如,“90”可以转换为
90#1606757564#de#city_name
.这样,当您查询半径时,您将得到整个键。使用简单的
startsWith()
检查以获得原始限制。drnojrws2#
你也可以
(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
所以这也是一个两步查询。