Redis数据结构之Geospatial
一、什么是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 表示单位为英尺;
- m 表示单位为米(如果用户没有显式地指定单位参数, 那么
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相关推荐
- Redis 数据结构-字典源码分析
2019独角兽企业重金招聘Python工程师标准>>> 相关文章 Redis 初探-安装与使用 Redis 数据结构-字符串源码分析 本文将从以下几个方面介绍 前言 字典结构图 字典 ...
- 为了拿捏 Redis 数据结构,我画了 40 张图
Redis 为什么那么快? 除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理. 因此,这次我们就来好 ...
- 【带你重拾Redis】Redis数据结构及使用场景
Redis数据结构 Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手. Redis主要支持以下数据结构: ...
- 深入剖析Redis系列(七) - Redis数据结构之列表
前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...
- redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介
字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...
- redis数据结构详解之Hash(四)
原文:redis数据结构详解之Hash(四) 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个 ...
- zincrby redis python_【Redis数据结构 序】使用redispy操作Redis数据库
点击蓝色"不太灵光的程序员"关注我哟加个"星标",每天上午 08:00,干货推送!本文依旧会对学习内容进行拆分,建议阅读时间基本保持10分钟内,想学习之前章节内 ...
- redis 数据结构
2019独角兽企业重金招聘Python工程师标准>>> redis对象 redis 数据结构 字符串对象 SDS(简单动态字符串) 列表对象 压缩列表(ziplist) 或 链表 ...
- Redis 数据结构与内存管理策略(上)
Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
最新文章
- 可视化应用实战案例:metacoder-相关进化树图的绘制
- oracle 11g 数据库恢复技术 ---03 补充日志
- LeetCode:贪婪算法
- linux 复制文件 中文,linux中cp命令如何复制文件
- 常用python分析数据包pipinstallnumpy_安装numpy和matplotlib时,pip依赖关系解析失败
- oracle嵌套三层循环语句,在存储过程中执行3种oracle循环语句
- 从编程语言进化史,看 Java、C、C++ 等语言的演变
- python调用视频流_RTSP协议进行视频取流的方法、注意点及python实现
- 洛谷p3392计算机教育新社会,洛谷-P3392 涂国旗
- Cracking the Coding Interview Q1.2
- 农大计算机在线作业2,计算机应用基础(第2版)_在线作业_2参考答案[网上农大]
- 谷歌浏览器32位安装包_Chromium内核的edge浏览器终于来了,试用了半天,发现真香!...
- 人工智能-10种机器学习常见算法
- 百度地图获取规划路径信息
- SIGHUP信号相关
- Java工具类-获取请求ip/浏览器/操作系统/浏览器版本
- 初创公司如何选择企业级服务器配置
- java.lang.NullPointerException
- 无创无痛测血糖,亲哥智能发布新品-无创血糖仪
- 云计算、大数据以及物联网的区别和联系