Redis笔记10:三种特殊数据类型-Geospatial

Geospatial 地理位置
可以用于朋友定位、附近的人、两地的距离
Redis在3.2版本中推出了geo

GEOADD 命令 - 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中

https://www.redis.net.cn/order/3685.html

两极无法添加,一般会下载城市经纬度信息,通过Java程序一次性导入!
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。

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.32 shanghai 106.50 29.53 chongqing
(integer) 2
127.0.0.1:6379> geoadd china:city 114.05 22.52 shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 114.31 33.47 xihua
(integer) 1
127.0.0.1:6379> geoadd china:city 111.731 37.314 fenyang
(integer) 1
GEOPOS 命令 - 从key里返回所有给定位置元素的位置(经度和纬度)

https://www.redis.net.cn/order/3688.html

127.0.0.1:6379> geopos china:city beijing      #获得指定城市的经度和纬度
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing chongqing
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "106.49999767541885376"
   2) "29.52999957900659211"
GEODIST 命令 - 返回两个给定位置之间的距离

https://www.redis.net.cn/order/3686.html

m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

127.0.0.1:6379> GEODIST china:city xihua fenyang km
"487.2687"
127.0.0.1:6379> GEODIST china:city xihua beijing km
"739.0150"
GEORADIUS 命令 - 以给定的经纬度为中心, 找出某一半径内的元素

https://www.redis.net.cn/order/3689.html

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km        #以110 30为经纬度中心,查询方圆1000km以内的城市
1) "chongqing"
2) "fenyang"
3) "shenzhen"
4) "xihua"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km
1) "chongqing"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist    #显示到110 30的位置
1) 1) "chongqing"
   2) "341.9374"
2) 1) "fenyang"
   2) "829.0946"
3) 1) "shenzhen"
   2) "924.6408"
4) 1) "xihua"
   2) "561.3022"

127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord      #显示到110 30的定位信息
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 1    #筛选指定结果,比如只展示1条
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 2
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xihua"
   2) "561.3022"
   3) 1) "114.31000024080276489"
      2) "33.47000056573696725"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 3
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xihua"
   2) "561.3022"
   3) 1) "114.31000024080276489"
      2) "33.47000056573696725"
3) 1) "fenyang"
   2) "829.0946"
   3) 1) "111.73100262880325317"
      2) "37.31399898855737973"
GEORADIUSBYMEMBER 命令 - 找出位于指定范围内的元素,中心点是由给定的位置元素决定

https://www.redis.net.cn/order/3690.html

127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "xihua"
2) "beijing"
3) "fenyang"
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 500 km
1) "beijing"
2) "fenyang"
GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示

https://www.redis.net.cn/order/3687.html

将二维的经纬度转化为一维的字符串,两个字符串越接近,距离越近

127.0.0.1:6379> GEOHASH china:city beijing xihua
1) "wx4fbxxfke0"
2) "wtcq3jn0bh0"
geo的底层实现原理其实就是Zset,我们可以使用Zset命令来操作geo
127.0.0.1:6379> zrange china:city 0 -1      #查询地图中所有元素
1) "chongqing"
2) "fenyang"
3) "shenzhen"
4) "shanghai"
5) "xihua"
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) "fenyang"
3) "shenzhen"
4) "shanghai"
5) "xihua"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值