Redis Note10:三种特殊数据类型—Geospatial地理位置

Redis Note10:三种特殊数据类型—Geospatial地理位置

1. Geospatial

  • 有效的经度从-180度到180度。
  • 有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。

1.1 添加数据:geoadd

# getadd 添加地理位置 # 规则:两极无法直接添加 # 参数 (纬度、经度、名称) 127.0.0.1:6379> geoadd china:city 116.40 39.00 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 chongqing 114.05 22.52 shenzhen (integer) 2 127.0.0.1:6379> geoadd china:city 120.16 30.04 hangzhou (integer) 1

1.2 查询:geopos

127.0.0.1:6379> geopos china:city beijing 1) 1) "116.39999896287918091" 2) "38.99999918434559731" 127.0.0.1:6379> geopos china:city beijing chongqing 1) 1) "116.39999896287918091" 2) "38.99999918434559731" 2) 1) "106.49999767541885376" 2) "29.52999957900659211"

1.3 两个给定位置之间的距离:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
127.0.0.1:6379> GEODIST china:city beijing shanghai "979192.0181" 127.0.0.1:6379> GEODIST china:city beijing shanghai km "979.1920"

1.2 半径查询:GEORADIUS

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km 1) "chongqing" 2) "shenzhen" 3) "hangzhou" 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km 1) "chongqing" # 查询带上距离 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist 1) 1) "chongqing" 2) "341.9374" # 查询带上经纬度 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord 1) 1) "chongqing" 2) 1) "106.49999767541885376" 2) "29.52999957900659211" # 指定数量 127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withcoord count 2 1) 1) "chongqing" 2) 1) "106.49999767541885376" 2) "29.52999957900659211" 2) 1) "shenzhen" 2) 1) "114.04999762773513794" 2) "22.5200000879503861"

1.3 查询指定元素周围的其他元素:GEORADIUSBYMEMBER

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

1.4 将二维的经纬度换为一维的字符串:GEOHASH

字符串越接近,那么距离越近。
127.0.0.1:6379> GEOHASH china:city beijing chongqing 1) "wwfvbexzkw0" 2) "wm5xzrybty0"
 

1.5 补充

GEO底层实现原理就是Zset,可以使用Zset命令操作geo
# 查询所有 127.0.0.1:6379> ZRANGE china:city 0 -1 1) "chongqing" 2) "shenzhen" 3) "hangzhou" 4) "shanghai" 5) "beijing" # 删除指定元素 127.0.0.1:6379> zrem china:city beijing (integer) 1 127.0.0.1:6379> ZRANGE china:city 0 -1 1) "chongqing" 2) "shenzhen" 3) "hangzhou" 4) "shanghai"