核心数据出行

地理空间搜索

在半径或矩形范围内查找最近的司机、门店或设备,实时位置每隔几秒更新一次。

或矩形搜索
半径
单位
km, mi, m, ft
位置更新
实时
步骤 1 / 4
司机上报位置

每次更新都会替换该司机之前的位置。

示例会话playing
# 司机上报位置
hotkv> GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
(integer) 0

使用真实 HotKV 命令和示例回复的动画演示。点击任意步骤即可跳转。 命令和回复保持英文,与您在 HotKV 中输入和看到的完全一致。

问题所在

为乘客匹配最近的司机,或为顾客匹配最近且有货的门店,需要对成千上万个移动中的位置有最新的视图,并在几毫秒内给出答案。带空间索引的关系型数据库难以承受每秒这么多的更新。

HotKV 如何解决

位置存放在地理空间索引中。每位司机每隔几秒用 GEOADD 更新自己的位置,GEOSEARCH 返回半径或矩形范围内的所有对象,由近到远排列,并附带距离。同一个索引还能回答门店查找和配送区域查询。

逐步演示

逐条命令,看看发生了什么

  1. 01

    司机上报位置

    每次更新都会替换该司机之前的位置。

    GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
  2. 02

    乘客叫车

    查找 3 km 内最近的五位司机,由近到远。

    GEOSEARCH drivers:berlin FROMLONLAT 13.4000 52.5190 BYRADIUS 3 km ASC COUNT 5 WITHDIST
  3. 03

    派单

    锁定这位司机,两位乘客不会叫到同一辆车。

    SET offer:driver:17 rider:42 NX EX 15
  4. 04

    到上车点的距离

    索引中两个成员之间的距离。

    GEODIST drivers:berlin driver:17 driver:23 km
适用场景

真实场景

网约车与出租车

几毫秒内就能找到附近的司机,派单锁防止重复预订。

配送平台

订单备好时,为其匹配餐厅附近的骑手。

门店查找

顾客能看到地图视图周围矩形范围内最近的门店。

内置功能

您将获得

实时位置

GEOADD 按经度和纬度添加或更新成员。

GEOADD

半径与矩形搜索

围绕一个点或一个成员,按距离排序,并限制数量。

GEOSEARCHGEOSEARCHSTORE

距离与位置

成员之间的距离,单位由您选择。

GEODISTGEOPOS

底层就是普通的有序集合

用您熟悉的有序集合命令删除和统计成员。

ZREMZCARD

常见问题

如何移除下线的司机?

地理空间索引就是一个有序集合,因此用 ZREM 删除该成员即可。

可以在矩形范围内搜索吗?

可以。GEOSEARCH BYBOX 接收围绕某个点或成员的宽度和高度。

支持哪些单位?

米、千米、英尺和英里。

相关用例

在您自己的工作负载上试试

HotKV 兼容 Redis 协议,您可以把现有客户端指向它,运行这些相同的命令。