对于经纬度坐标的存储以及在他们之间计算距离,使用关系型数据库将会变得很复杂,在 Redis 中可以使用其中内置的 GeoHash 算法实现,其实际上就是一个 ZSet ,value 为元素的 key ,score 为 52 位的整数(GeoHash 会将二维的数据映射成一维的数据再做一次 base32 编码)。

    1. >> geoadd company 116.48105 39.996794 juejin
    2. 代表创建一个名为companyGeoHash结构,接着往里面添加一个元素,valuejuejinscore为前面的经纬度坐标的映射值
    1. >> geodist company juejin ireader km
    2. 可以计算出juejin ireader 之间的距离km
    1. >> geopos company juejin
    2. 可以获取juejin对应的经纬度(有小误差)
    1. >> georadiusbymember company ireader 1 km withcoord withdist count 3 asc
    2. 可以查询ireader 1km范围内的3个公司 withcoord+withdist代表详细经纬度

    因此使用该结构可以很简单地查询地图坐标之间的距离【实现附近的人、附近的餐馆等功能】。