redis特殊数据类型geospatial
geospatial地理位置
redis的geo在redis3.2版本推出的,这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人
GEOADD将指定的地理空间位置(纬度、经度、名称)添加到指定的
key
中。这些数据将会存储到sorted set
这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。
两级是不能直接添加的,南极北极
经纬度不能超过范围
-
有效的经度从-180度到180度。
-
有效的纬度从-85.05112878度到85.05112878度。
#参数 key 值(经度,纬度,名称) 127.0.0.1:6379> GEOADD china:city 116.40 39.90 beijinh (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 (integer) 1 127.0.0.1:6379> GEOADD china:city 114.05 22.52 shenzeng (integer) 1 127.0.0.1:6379> GEOADD china:city 120.16 30.24 hangzhou 108.96 34.26 xian (integer) 2
GEOPOS获取经纬度
127.0.0.1:6379> GEOPOS china:city beijing 1) 1) "116.39999896287918091" 2) "39.90000009167092543" 127.0.0.1:6379> GEOPOS china:city xian 1) 1) "108.96000176668167114" 2) "34.25999964418929977" 127.0.0.1:6379> GEOPOS china:city shanghai chongqing 1) 1) "121.47000163793563843" 2) "31.22999903975783553" 2) 1) "106.49999767541885376" 2) "29.52999957900659211"
GEODIST两者的距离
返回两个给定位置之间的距离。
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit 必须是以下单位的其中一个:
-
m 表示单位为米。
-
km 表示单位为千米。
-
mi 表示单位为英里。
-
ft 表示单位为英尺。
127.0.0.1:6379> GEODIST china:city shanghai beijing "1067378.7564" 127.0.0.1:6379> GEODIST china:city shanghai beijing km "1067.3788"
GEORADIUS以给定的经纬度为中心, 返回键包含的位置元素
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
-
m 表示单位为米。
-
km 表示单位为千米。
-
mi 表示单位为英里。
-
ft 表示单位为英尺。
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km #获取当前经纬度110,30方圆1000km的城市 1) "chongqing" 2) "xian" 3) "shenzeng" 4) "hangzhou" 127.0.0.1:6379> GEORADIUS china:city 110 30 100 km (empty array) 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km 1) "chongqing" 2) "xian" 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist #显示直线距离 1) 1) "chongqing" 2) "341.9374" 2) 1) "xian" 2) "483.8340" 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord #显示他人的定位 1) 1) "chongqing" 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 #count 删选 1) 1) "chongqing" 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) "chongqing" 2) "341.9374" 3) 1) "106.49999767541885376" 2) "29.52999957900659211" 2) 1) "xian" 2) "483.8340" 3) 1) "108.96000176668167114" 2) "34.25999964418929977" 127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 3 1) 1) "chongqing" 2) "341.9374" 3) 1) "106.49999767541885376" 2) "29.52999957900659211" 2) 1) "xian" 2) "483.8340" 3) 1) "108.96000176668167114" 2) "34.25999964418929977"
GEORADIUSBYMEMBER 找出位于指定元素周围的其他元素
这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER
的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
指定成员的位置被用作查询的中心。
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km 1) "beijing" 2) "xian"
GEOHASH返回一个或多个位置元素的 Geohash 表示。 使用可以查找官方文档
通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。此命令返回一个标准的Geohash,在维基百科和geohash.org网站都有相关描述
geo的底层是使用的Zset
127.0.0.1:6379> ZRANGE china:city 0 -1 1) "chongqing" 2) "xian" 3) "shenzeng" 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) "chongqing" 2) "xian" 3) "shenzeng" 4) "hangzhou" 5) "shanghai"
学习参考狂神说java