redis的Geo在redis3.2版本就推出了,这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人。

只有六个命令:

  1. GEOADD:添加地理位置
  2. GEODIST:获取两人之间的距离
  3. GEOHASH:返回一个或多个位置元素的geohash表示
  4. GEOPOS:获取当前位置
  5. GEORADIUS:以给定的经纬度为中心,找出某一半径内的元素
  6. GEORADIUSBYMEMBER:找出位于指定元素周围的其他元素

geoadd:添加地理位置

#geoadd 添加地理位置
#规则:两级无法直接添加,一般会下载城市数据,直接通过java程序一次性导入
#有效的经度从-180度到180度
#有效的维度从-85.05112878度到85.05112878度
#当坐标位置超出上述指定范围时,该命令将会返回一个错误
127.0.0.1:6379> geoadd china:city 116.40 49.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai 
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqin
(integer) 1
127.0.0.1:6379> geoadd china:city 114.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 3

geopos:获取当前定位(一定是一个坐标值)

#获取指定城市的经度和纬度
127.0.0.1:6379> geopos china:city beijing
1) 1) "116.39999896287918091"
   2) "49.89999975254306719"
127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"
   2) "31.22999903975783553"
127.0.0.1:6379> geopos china:city chongqin xian
1) 1) "106.49999767541885376"
   2) "29.52999957900659211"
2) 1) "108.96000176668167114"
   2) "34.25999964418929977"

geodist:两个地点之间的距离

单位:

  • m表示单位为米
  • km表示单位为千米
  • mi表示单位为英里
  • ft表示单位为英尺
127.0.0.1:6379> geodist china:city beijing shanghai km #beijing到shanghai的直线距离
"2119.0768"
127.0.0.1:6379> geodist china:city beijing chongqin km  #beijing到chongqin的直线距离
"2413.8466"

georadius:以给定的经纬度为中心,找出某一半径内的元素

127.0.0.1:6379> georadius china:city 100 30 500 km
(empty list or set)
127.0.0.1:6379> georadius china:city 110 30 500 km    #以110,30 经纬度为中心,寻找方圆500km内的城市
1) "chongqin"
2) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist  #显示到指定位置的距离
1) 1) "chongqin"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord #显示查找范围内的城市的坐标
1) 1) "chongqin"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 1  #显示一个指定范围内的城市的坐标及到指定位置的距离 
1) 1) "chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"

georadiusmember:找出位于指定元素范围内的其他元素

127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"
127.0.0.1:6379> georadiusbymember china:city shanghai 1000 km
1) "hangzhou"
2) "shanghai"

geohash:返回一个或多个位置元素的geohash表示,返回11个字符的geohash字符串

#将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近
127.0.0.1:6379> geohash china:city beijing shanghai xian
1) "y8fgbspbsd0"
2) "wtw3sj5zbj0"
3) "wqj6zky6bn0"

geo的底层实现原理其实就是zset,可以使用zset命令来操作geo

127.0.0.1:6379> zrange china:city 0 -1  #查看所有元素
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city beijing  #移除指定元素
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqin"
2) "xian"
3) "shengzhen"
4) "hangzhou"
5) "shanghai"

 

 posted on 2020-11-20 15:49  会飞的金鱼  阅读(404)  评论(0)    收藏  举报