一、什么是Geospatial

和String一样,也是Redis支持的一种数据类型或者数据结构,用来存储和管理地理位置的

二、相关命令

Geospatial相关的命令有6个,下面依次梳理

1. geoadd

  • GEOADD key longitude latitude member [longitude latitude member …]

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

  • 限制:

    • 有效的经度从-180度到180度;
    • 有效的纬度从-85.05112878度到85.05112878度;
    • 当坐标位置超出上述指定范围时,该命令将会返回一个错误:(error) ERR invalid longitude,latitude pair。
127.0.0.1:6379> geoadd china:guangdong:shenzhen 113.88308 22.55329 baoan
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 114.05454 22.52291 futian
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 114.06031 22.72174 longhua
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 113.935898 22.748817 guangming
(integer) 1
127.0.0.1:6379> geoadd china:guangdong:shenzhen 181.935898 22.748817 guangming
(error) ERR invalid longitude,latitude pair 181.935898,22.748817

2. geodist

  • GEODIST key member1 member2 [unit] 返回两个给定位置之间的距离。

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

  • 指定单位的参数 unit 必须是以下单位的其中一个:

    • m 表示单位为米(如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位);
    • km 表示单位为千米;
    • mi 表示单位为英里;
    • ft 表示单位为英尺;
  • GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。

  • 计算出的距离会以双精度浮点数的形式被返回。 如果给定的位置元素不存在, 那么命令返回空值。

127.0.0.1:6379> geodist china:guangdong:shenzhen baoan futian
"17935.8200"
127.0.0.1:6379> geodist china:guangdong:shenzhen baoan futian km
"17.9358"
127.0.0.1:6379> geodist china:guangdong:shenzhen baoan xxx
(nil)

3. geohash

  • GEOHASH key member [member …] 返回一个或多个位置元素的 Geohash 表示。

  • Geohash表示就是11个字符的Geohash字符串

  • 返回值:一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。

127.0.0.1:6379> geohash china:guangdong:shenzhen baoan futian
1) "ws0br3xnkn0"
2) "ws105k5vrq0" #
127.0.0.1:6379> geohash china:guangdong:shenzhen baoan baoan
1) "ws0br3xnkn0"
2) "ws0br3xnkn0"

4. geopos

  • GEOPOS key member [member …] 返回指定key中给定位置元素的位置(经度和纬度),可以指定多个位置。
  • 返回值:
    • 返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。
    • 当给定的位置元素不存在时, 对应的数组项为空值。
127.0.0.1:6379> geopos china:guangdong:shenzhen baoan
1) 1) "113.88307839632034302" # 经度2) "22.55329111565713873"# 纬度
127.0.0.1:6379> geopos china:guangdong:shenzhen xxx
1) (nil) # xxx位置不存在,返回nil

5. georadius

  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

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

  • radius单位:

    • m 表示单位为米。
    • km 表示单位为千米。
    • mi 表示单位为英里。
    • ft 表示单位为英尺。
  • 在给定以下可选项时, 命令会返回额外的信息:

    • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
    • WITHCOORD: 将位置元素的经度和维度也一并返回。
    • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
    • 命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
      • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
      • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 10 km
1) "baoan"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km
1) "baoan"
2) "futian"
3) "guangming"
4) "longhua"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withcoord
1) 1) "baoan"2) 1) "113.88307839632034302" # 加withcoord 将经纬度也返回2) "22.55329111565713873"
2) 1) "futian"2) 1) "114.05454128980636597"2) "22.52290994784130618"
3) 1) "guangming"2) 1) "113.93589645624160767"2) "22.74881697116738621"
4) 1) "longhua"2) 1) "114.06030803918838501"2) "22.72174107974333168"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withdist
1) 1) "baoan"2) "5.3456" # withdist 将离中心点的距离也返回
2) 1) "futian"2) "12.8056"
3) 1) "guangming"2) "23.9755"
4) 1) "longhua"2) "24.8407"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withhash
1) 1) "baoan"2) (integer) 4046340107163728
2) 1) "futian"2) (integer) 4046432195313614
3) 1) "guangming"2) (integer) 4046616569217917
4) 1) "longhua"2) (integer) 4046617158098105
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km count 1 # count 1 只搜索一个
1) "baoan"
127.0.0.1:6379> georadius china:guangdong:shenzhen 113.93041 22.53332 100 km withdist desc
# desc,从远到近排序
1) 1) "longhua"2) "24.8407"
2) 1) "guangming"2) "23.9755"
3) 1) "futian"2) "12.8056"
4) 1) "baoan"2) "5.3456"

6. georadiusbymember

  • GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

    和georadius作用一样,区别是中心点只能从集合中选取

127.0.0.1:6379> georadiusbymember china:guangdong:shenzhen baoan 100 km
1) "baoan"
2) "futian"
3) "guangming"
4) "longhua"

三、中文官网资料

http://www.redis.cn/commands/geoadd.html

Redis数据结构之Geospatial相关推荐

  1. Redis 数据结构-字典源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 相关文章 Redis 初探-安装与使用 Redis 数据结构-字符串源码分析 本文将从以下几个方面介绍 前言 字典结构图 字典 ...

  2. 为了拿捏 Redis 数据结构,我画了 40 张图

    Redis 为什么那么快? 除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理. 因此,这次我们就来好 ...

  3. 【带你重拾Redis】Redis数据结构及使用场景

    Redis数据结构 Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手. Redis主要支持以下数据结构: ...

  4. 深入剖析Redis系列(七) - Redis数据结构之列表

    前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...

  5. redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介

    字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...

  6. redis数据结构详解之Hash(四)

    原文:redis数据结构详解之Hash(四) 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个 ...

  7. zincrby redis python_【Redis数据结构 序】使用redispy操作Redis数据库

    点击蓝色"不太灵光的程序员"关注我哟加个"星标",每天上午 08:00,干货推送!本文依旧会对学习内容进行拆分,建议阅读时间基本保持10分钟内,想学习之前章节内 ...

  8. redis 数据结构

    2019独角兽企业重金招聘Python工程师标准>>> redis对象 redis 数据结构 字符串对象  SDS(简单动态字符串) 列表对象  压缩列表(ziplist) 或 链表 ...

  9. Redis 数据结构与内存管理策略(上)

    Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

最新文章

  1. 可视化应用实战案例:metacoder-相关进化树图的绘制
  2. oracle 11g 数据库恢复技术 ---03 补充日志
  3. LeetCode:贪婪算法
  4. linux 复制文件 中文,linux中cp命令如何复制文件
  5. 常用python分析数据包pipinstallnumpy_安装numpy和matplotlib时,pip依赖关系解析失败
  6. oracle嵌套三层循环语句,在存储过程中执行3种oracle循环语句
  7. 从编程语言进化史,看 Java、C、C++ 等语言的演变
  8. python调用视频流_RTSP协议进行视频取流的方法、注意点及python实现
  9. 洛谷p3392计算机教育新社会,洛谷-P3392 涂国旗
  10. Cracking the Coding Interview Q1.2
  11. 农大计算机在线作业2,计算机应用基础(第2版)_在线作业_2参考答案[网上农大]
  12. 谷歌浏览器32位安装包_Chromium内核的edge浏览器终于来了,试用了半天,发现真香!...
  13. 人工智能-10种机器学习常见算法
  14. 百度地图获取规划路径信息
  15. SIGHUP信号相关
  16. Java工具类-获取请求ip/浏览器/操作系统/浏览器版本
  17. 初创公司如何选择企业级服务器配置
  18. java.lang.NullPointerException
  19. 无创无痛测血糖,亲哥智能发布新品-无创血糖仪
  20. 云计算、大数据以及物联网的区别和联系

热门文章

  1. 抖音评论突然不见了是什么意思
  2. pytorch实现LSTM学习总结
  3. 无线网络技术教学研究平台
  4. 计算机流程图知识点,程序框图知识点总结,高中数学程序框图知识点总结
  5. 同环比与MTD/QTD/YTD月季年累计在查询引擎中的实现
  6. 行政审批系统建设的思考
  7. PYTHON用时变马尔可夫区制转换(MRS)自回归模型分析经济时间序列
  8. Hive 设置map 和 reduce 的个数
  9. VSO Downloader下载工具vso_downloader_setup.exe
  10. 企业如何判断自己是否需要crm系统