我是redis的新手,并且正在考虑实施一些项目以便熟悉它。我想到的一个有趣的项目是使用redis作为实时gps位置的缓存。困扰我的唯一部分是它的实施。我阅读了redia对地理空间数据的支持,但是如果我想继续更新某些键的位置点,那就让我很烦恼,这似乎是不可能的。
我开始使用的一种方法是使用哈希结构来存储需要跟踪的lat和long的设备,并继续设置其值,然后更新值,并将所有这些哈希值保留在集合中。但这似乎不是引擎盖方法,它也不允许我使用redis提供的地理空间查询。
任何有关如何以有效方式实施该计划的线索。
答案 0 :(得分:2)
您可以在具有不同坐标的相同设备ID上重复使用GEOADD。这将“移动”对象在地理集中的位置,并立即影响下一个半径查询。
127.0.0.1:6379> GEOADD foo 34 32 bar
(integer) 1
127.0.0.1:6379> GEORADIUS foo 34 32 100 m
1) "bar"
# Let's "move" bar in foo to new coordinates
127.0.0.1:6379> GEOADD foo 35 36 bar
(integer) 0
127.0.0.1:6379> GEORADIUS foo 34 32 100 m
(empty list or set)
127.0.0.1:6379> GEORADIUS foo 35 36 100 m
1) "bar"
如果你想要坐标,这也很容易:
127.0.0.1:6379> GEORADIUS foo 35 36 100 m WITHCOORD
1) 1) "bar"
2) 1) "34.99999791383743286"
2) "35.99999953955607168"