Redis 三种特殊数据类型
geospatial 地理位置
朋友的定位,附近的人,打车距离的计算
Redis的Geo在Redis3.2版本就有了!这个功能可以推算地理位置信息,两地之间的距离,方圆几里的人!
可以查询一些测试数据 www.jsons.cn/lngcode/
只有六个命令
geoadd
# 添加地理位置
# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入
# 参数 key 值(纬度、经度、名称)
# 有效的经度从-180度到180度。
# 有效的纬度从-85.05112878度到85.05112878度。
127.0.0.1:6379[1]> GEOADD china:city 116.405285 39.904989 beijin
(integer) 1
127.0.0.1:6379[1]> GEOADD china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379[1]> GEOADD china:city 106.504962 29.533155 chongqing 114.085947 22.547 shenzhen
(integer) 2
127.0.0.1:6379[1]> GEOADD china:city 120.153576 30.287459 hangzhou 108.9608 34.26641 xian
(integer) 2
geopos
127.0.0.1:6379[1]> GEOPOS china:city beijin # 获取指定城市的经度和纬度
1) 1) "116.40528291463852"
2) "39.904988422912503"
127.0.0.1:6379[1]> GEOPOS china:city shanghai shenzhen
1) 1) "121.47264629602432"
2) "31.23170490709807"
2) 1) "114.08594459295273"
2) "22.546999937739663"
两人之间的距离
指定单位的参数 unit 必须是以下单位的其中一个:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。
GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。
127.0.0.1:6379[1]> GEODIST china:city beijin shanghai
"1067597.9668"
127.0.0.1:6379[1]> GEODIST china:city beijin shanghai km
"1067.5980"
georadius - 以给定的经纬度为中心, 找出某一半径内的元素
我附近的人(获得附近的人的地址,定位)通过半径来查询
所有的数据应该录入:china:city,才会让结果更加清晰
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km # 以110,30这个经纬度为中心,寻找方圆1000km内的城市
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km
1) "chongqing"
2) "xian"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist # 显示到中心位置的距离
1) 1) "chongqing"
2) "341.4052"
2) 1) "xian"
2) "484.5164"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withcoord # 显示范围内他人的定位信息
1) 1) "chongqing"
2) 1) "106.50495976209641"
2) "29.53315530684997"
2) 1) "xian"
2) 1) "108.96080106496811"
2) "34.266409954001269"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 筛选出指定的结果
1) 1) "chongqing"
2) "341.4052"
3) 1) "106.50495976209641"
2) "29.53315530684997"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"
2) "341.4052"
3) 1) "106.50495976209641"
2) "29.53315530684997"
2) 1) "xian"
2) "484.5164"
3) 1) "108.96080106496811"
2) "34.266409954001269"
GEORADIUSBYMEMBER
# 找出位于指定元素周围内的其它元素
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city beijin 1000 km # 显示以北京为中心,方圆1000km内的城市
1) "beijin"
2) "xian"
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 400 km
1) "hangzhou"
2) "shanghai"
GEOHASH 返回一个或多个位置元素的 Geohash 表示
该命令将返回11个字符的Geohash字符串!
# 将二位的经纬度转换为一维的字符串,如果两个字符串越接近,则距离越近
127.0.0.1:6379[1]> GEOHASH china:city beijin chongqing
1) "wx4g0b7xrt0"
2) "wm78p86e170"
GEO 底层的实现原理其实就是Zset!我们可以使用Zset命令来操作GEO
127.0.0.1:6379[1]> ZRANGE china:city 0 -1 # 查看地图中的全部元素
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijin"
127.0.0.1:6379[1]> ZREM china:city beijin # 移除指定元素
(integer) 1
127.0.0.1:6379[1]> ZRANGE china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
本作品采用《CC 协议》,转载必须注明作者和本文链接