Redis 特殊数据类型 地理空间(Geospatial)

redis除了提供了五大基本数据类型String、List、Set、Hash、Zset,还有3个比较特殊的数据类型,Geospatial、Hyperloglog、Bitmap,这三个数据类型有一些比较有趣的应用场景,下面说说Geospatial,主要可以应用于跟地图相关的应用

相关命令
geoadd #将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
geodist #返回两个给定位置之间的距离。
geohash #返回一个或多个位置元素的 Geohash 表示
geopos #从key里返回所有给定位置元素的位置(经度和纬度)
georadius #以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素
georadiusbymember #中心点是由给定的位置元素决定的,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素

参考文档:http://www.redis.cn/commands/geoadd.html

GEOADD

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

127.0.0.1:6379> geoadd city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd city 117.19 39.01 tianjin
(integer) 1
127.0.0.1:6379> geoadd city 121.47 31.23 shanghai 118.77 32.04 nanjing 113.28 23.13 guangzhou 114.09 22.55 shenzhen
(integer) 4
GEODIST

返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在,那么命令返回空值。

可以指定单位,默认是米

* m 米
* km 千米
* mi 英里
* ft 英尺
# 北京到天津的直线距离
127.0.0.1:6379> geodist city beijing tianjin
"120008.3662"
127.0.0.1:6379> geodist city beijing tianjin km
"120.0084"

在这里插入图片描述

根据百度地图测量工具看,计算出来的距离长度是没错的,误差是由于经度纬度填写导致的。

GEOHASH

返回一个或多个位置元素的 Geohash 表示

127.0.0.1:6379> geohash city beijing tianjin
1) "wx4fbxxfke0"
2) "wwgmftx1sz0"
GEOPOS

key里返回所有给定位置元素的位置(经度和纬度)。

127.0.0.1:6379> geopos city beijing tianjin shanghai nanjing guangzhou shenzhen
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "117.19000071287155151"
   2) "39.01000119404034905"
3) 1) "121.47000163793563843"
   2) "31.22999903975783553"
4) 1) "118.76999884843826294"
   2) "32.03999960287850968"
5) 1) "113.27999979257583618"
   2) "23.13000101271457254"
6) 1) "114.09000009298324585"
   2) "22.5500010475923105"
GEORADIUS

以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。

可以指定单位,默认是米

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

应用:通过给定的半径距离来找附近的人等

127.0.0.1:6379> georadius city 120 20 1000 km #以120,20为中心,寻找方圆1000米的城市
1) "shenzhen"
2) "guangzhou"
127.0.0.1:6379> georadius city 120 20 1000 km withdist#返回位置元素的同时,将位置元素和中心之间的距离一并返回
1) 1) "shenzhen"
   2) "674.9271"
2) 1) "guangzhou"
   2) "777.2656"
127.0.0.1:6379> georadius city 120 20 1000 km withcoord#将位置信息和经度纬度一并返回
1) 1) "shenzhen"
   2) 1) "114.09000009298324585"
      2) "22.5500010475923105"
2) 1) "guangzhou"
   2) 1) "113.27999979257583618"
      2) "23.13000101271457254"
127.0.0.1:6379> georadius city 120 20 1000 km withcoord count 1#选取前1个匹配的元素
1) 1) "shenzhen"
   2) 1) "114.09000009298324585"
      2) "22.5500010475923105"
127.0.0.1:6379> georadius city 120 20 1000 km withcoord asc#从近到远
1) 1) "shenzhen"
   2) 1) "114.09000009298324585"
      2) "22.5500010475923105"
2) 1) "guangzhou"
   2) 1) "113.27999979257583618"
      2) "23.13000101271457254"
127.0.0.1:6379> georadius city 120 20 1000 km withcoord desc#从远到近
1) 1) "guangzhou"
   2) 1) "113.27999979257583618"
      2) "23.13000101271457254"
2) 1) "shenzhen"
   2) 1) "114.09000009298324585"
      2) "22.5500010475923105"
GEORADIUSBYMEMBER

找出位于指定元素周围的其他元素

127.0.0.1:6379> georadiusbymember city beijing 1000 km
1) "nanjing"
2) "tianjin"
3) "beijing"
127.0.0.1:6379> georadiusbymember city beijing 300  km
1) "tianjin"
2) "beijing"
可以用Zset的命令来操作Geo
127.0.0.1:6379> zrange city 0 -1
1) "shenzhen"
2) "guangzhou"
3) "shanghai"
4) "nanjing"
5) "tianjin"
6) "beijing"
127.0.0.1:6379> zrem city tianjin
(integer) 1
127.0.0.1:6379> zrange city 0 -1
1) "shenzhen"
2) "guangzhou"
3) "shanghai"
4) "nanjing"
5) "beijing"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值