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


Posted in Redis onJune 01, 2022

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

这是在redis 3.2版本推出的,推算地理位置的信息,两地之间的距离,周围方圆的人等等场景都可以用它实现。

一、geoadd

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

这里可以借助网上的一些查询经纬度的工具来获取数据。

geoadd china:city 121.472644 31.231706 shanghai
geoadd china:city 120.619585 31.299379 suzhou
geoadd china:city 116.405285 39.904989 beijing
geoadd china:city 113.280637 23.125178 guangzhou 113.26197 23.10379 haizhuqu

china:city这个key里,添加了5个地方的经纬度:上海、苏州、北京、广州、广州海珠区。

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

二、geopos

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

geopos china:city suzhou shanghai

返回位置的坐标。

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

三、geodist

返回两个给定位置之间的距离。

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

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

  • m 表示单位为米(默认)。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
geodist china:city suzhou shanghai km

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

四、georadius

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

georadius china:city 121.49295 31.22337 30 km

我以 上海黄浦区的坐标121.49295 31.22337为中心,寻找30km之内的城市。

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

再远点,100km之内,还可以找到suzhou,加上withdist显示出距离。

加上withcoord可以返回经纬度。

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

再加上count,只返回我指定的数量。

georadius china:city 121.49295 31.22337 100 km withdist withcoord count 1

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

五、georadiusbymember

这个命令和 georadius命令一样, 都可以找出位于指定范围内的元素。

但是这里不是指定中心点坐标,而是指定以哪个元素为中心点。

georadiusbymember china:city suzhou 100 km withdist

这里以元素suzhou为中心点,找周五100km内的其他元素。

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

六、geohash

一个或多个位置元素,用hash表示。

geohash china:city suzhou shanghai

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

返回11个字符的Geohash字符串,代表当前经纬度的字符串,就是换了个形式,将二维的经纬度转化成了一个一维的字符串。

如果上图结构里的2个字符串越接近,则2个位置距离也越近,这些了解即可。

geo的底层原理还是zset,我们可以使用zset命令操作geo,比如移除geo里的城市。

zrem china:city haizhuqu

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

更多的操作,可以自己亲自试试。

以上就是Redis特殊数据类型Geospatial地理空间的详细内容,更多关于Redis Geospatial地理空间的资料请关注三水点靠木其它相关文章!


Tags in this post...

Redis 相关文章推荐
详解Redis实现限流的三种方式
Apr 27 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
Redis缓存-序列化对象存储乱码问题的解决
Jun 21 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
springboot使用Redis作缓存使用入门教程
Jul 25 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 #Redis
Redis特殊数据类型bitmap位图
Jun 01 #Redis
浅谈Redis的事件驱动模型
May 30 #Redis
Redis 异步机制
Redis 报错 error:NOAUTH Authentication required
解决 redis 无法远程连接
Redis 限流器
May 15 #Redis
You might like
神族 Protoss 历史背景
2020/03/14 星际争霸
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
PHP守护进程实例
2015/03/06 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python ubplot使用方法解析
2020/01/10 Python
Keras 使用 Lambda层详解
2020/06/10 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
飘柔洗发水广告词
2014/03/14 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
总结几个非常实用的Python库
2021/06/26 Python
vue修饰符.capture和.self的区别
2022/04/22 Vue.js
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android