redis的Geo在redis3.2版本就推出了,这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人。
只有六个命令:
- GEOADD:添加地理位置
- GEODIST:获取两人之间的距离
- GEOHASH:返回一个或多个位置元素的geohash表示
- GEOPOS:获取当前位置
- GEORADIUS:以给定的经纬度为中心,找出某一半径内的元素
- 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
浙公网安备 33010602011771号