在外卖软件中的附近的美食店铺、外卖小哥的距离,打车软件附近的车辆,交友软件中附近的小姐姐。我们都可以利用redis的GEO地理位置计算得出。
1、Redis 的 Geo 是在 3.2 版本才有的
2、使用 geohash 保存地理位置的坐标
3、使用有序集合(zset)保存地理位置的集合
命令 | 描述 |
---|---|
geoadd | 增加某个地理位置的坐标 |
geopos | 获取某个地理位置的坐标 |
geodist | 获取某个地理位置的坐标 |
georadius | 根据给定地理位置坐标获取指定范围内的地理位置集合 |
georadiusbymember | 根据给定地理位置获取指定范围内的地理位置集合 |
geohash | 获取某个地理位置的 geohash 值 |
API:geo key longitude latitude member [longitude latitude member ..]
功能:增加地理位置信息
演示:
127.0.0.1:6379> geoadd cities:locations 116.28 39.55 beijing (integer) 1 127.0.0.1:6379> geoadd cities:locations 116.28 39.55 beijing (integer) 0 127.0.0.1:6379> geoadd cities:locations 117.12 39.08 tianjin (integer) 1 127.0.0.1:6379> geoadd cities:locations 114.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding (integer) 3
API:geopos key member [member]
功能:增加地理位置信息
演示:
127.0.0.1:6379> geopos cities:locations beijing 1) 1) "116.28000229597091675" 2) "39.5500007245470826" 127.0.0.1:6379> geopos cities:locations beijing tianjin 1) 1) "116.28000229597091675" 2) "39.5500007245470826" 2) 1) "117.12000042200088501" 2) "39.0800000535766543"
API:geodsit key member member1 member2
功能:获取两个地理位置的距离
#unit:m(米)、km(千米)、mi(英里)、ft(尺)
演示:
127.0.0.1:6379> geodist cities:locations beijing tianjin km "89.2061"
API:georadiusbymember key member raidusm|km|ft|mi [withcoord][withdist][withhash][COUNT count][asc|desc][store key][storedist key]
功能:获取两个地理位置的距离
参数:
演示:
查询距离北京550千米以内的所有城市,并按距离升序排列
127.0.0.1:6379> georadiusbymember cities:locations beijing 550 km withdist asc 1) 1) "beijing" 2) "0.0000" 2) 1) "tianjin" 2) "89.2061" 3) 1) "baoding" 2) "143.8646" 4) 1) "tangshan" 2) "149.7479" 5) 1) "shijiazhuang" 2) "242.3263"
API:geopos key member [member]
功能:获取某个地方的哈希值
演示:
127.0.0.1:6379> geohash cities:locations beijing 1) "wx48ypbe2q0"