查询附近的人或者是附近的商家是一个实用且常用的功能,比如微信中“附近的人”或是美团外卖中“附近商家”等,如下图所示:
那它是如何实现的呢?我们本文就一起来看。
我们本文的面试题是,使用 Redis 如何实现查询附近的人?
典型回答
在说如何实现地理位置查询之前,首先我们需要搞清楚地理位置查询的基础知识。
我们所处的任何位置都可以用经度和纬度来标识,经度的范围 -180 到 180,纬度的范围为:-90 到 90。纬度以赤道为界,赤道以南为负数,赤道以北为正数;经度以本初子午线 (英国格林尼治天文台) 为界,东边为正数,西边为负数。这样我们所处的位置才能在地球上被标注出来,这也成为了我们能够查询出两点之间距离的基础,如下图所示: 从而让查询附近的人变得简单了,我们只需要查询出附近几个点和自己的距离,再进行排序就可以实现查询附近人的功能了,然而使用 Redis 让这一切更简单了,Redis 为我们提供了专门用来存储地理位置的类型 GEO,我们使用它以及它所内置的方法就可以轻松的实现查询附近的人了。
我们可以使用 Redis 3.2 版本中新增了 GEO 类型,以及它的 georadius 命令来实现查询附近的人,例如我们可以先添加几个人的位置信息&#