三种特殊数据类型
geospatial地理位置
规则:两极数据无法直接添加。
利用geo这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
geospatial命令以“geo”开头
1.利用geoadd key longitude latitude member 命令添加位置
127.0.0.1:6379> geoadd china:city 116.40 39.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 chongqing
(integer) 1
127.0.0.1:6379>
2.利用geopos 命令获取指定的城市的经纬度
127.0.0.1:6379> geopos china:city beijing 1) 1) "116.39999896287918" 2) "39.900000091670925" 127.0.0.1:6379>
3.利用geodist命令获取两个给定位置之间的距离
指定的单位有:m、km、mi、ft
127.0.0.1:6379> geodist china:city beijing shanghai km "1067.3788" 127.0.0.1:6379>
4.利用georadius命令以给定的 经纬度为中心,找出一半径内的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km 1) "chongqing" 127.0.0.1:6379>
显示经纬度
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord 1) 1) "chongqing" 2) 1) "106.49999767541885" 2) "29.529999579006592" 127.0.0.1:6379>
5.利用georadiusbymemer命令找出位于指定范围内的元素,中心点是由给定的位置元素决定。
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km 1) "beijing"
6.利用geohash 命令返回一个或多个位置元素的geohash元素
该命令返回11个字符的geohash字符串!将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越接近!
127.0.0.1:6379> geohash china:city beijing chongqing 1) "wx4fbxxfke0" 2) "wm5xzrybty0" 127.0.0.1:6379>
7.geo底层实现原理其实就是zset,可以使用zset命令来操作geo
①比如查看地图中全部的元素
127.0.0.1:6379> zrange china:city 0 -1 1) "chongqing" 2) "shanghai" 3) "beijing" 127.0.0.1:6379>
②比如移除一个(指定)地理元素
127.0.0.1:6379> zrem china:city beijing (integer) 1 127.0.0.1:6379> zrange china:city 0 -1 1) "chongqing" 2) "shanghai" 127.0.0.1:6379>
应用场景:
朋友定位
附近的人
打车距离计算