GeoHash

业界比较通用的地理位置距离排序算法是 GeoHash 算法, Redis 也使用 GeoHash 算法。GeoHash算法将 二维的经纬度数据映射到一维的整数,这样所有的元素都将挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间的距离也会很接近。

Redis提供了6个Geo指令

  1. geoadd
127.0.0.1:6379> geoadd company 116.48105 39.996794 juejin
(integer) 1
127.0.0.1:6379> geoadd company 116.514203 39.905409 ireader
(integer) 1
127.0.0.1:6379> geoadd company 116.562108 39.787602 jd 116.334255 40.027400 xiaomi
(integer) 2
127.0.0.1:6379> 

2. geodist

127.0.0.1:6379> geodist company jd xiaomi km
"33.0047"
127.0.0.1:6379> geodist company juejin ireader km
"10.5501"
127.0.0.1:6379> 

3. 获取元素的 hash 值

geohash company jd

4. georadiusbymember

用来查询指定元素附近的其他元素

4.1 范围20公里以内最多 3个 元素 按距离 倒排,它不会排除自身

127.0.0.1:6379> georadiusbymember company jd 20 km 
1) "jd"
2) "ireader"
127.0.0.1:6379> georadiusbymember company jd 20 km count 3
1) "jd"
2) "ireader"
127.0.0.1:6379> georadiusbymember company jd 20 km count 3 desc
1) "ireader"
2) "jd"
127.0.0.1:6379> 

4.2 同时返回距离

georadiusbymember company jd 20 km count 3 desc withdist

5. 直接使用坐标

127.0.0.1:6379> georadius company 116.334255 40.027400 20 km count 3 desc withdist
1) 1) "juejin"
   2) "12.9604"
2) 1) "xiaomi"
   2) "0.0002"
127.0.0.1:6379> 

6. 获取元素位置

geopos company jd

Send a Message