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 相关文章推荐
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
5分钟教你docker安装启动redis全教程(全新方式)
May 29 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis性能监控的实现
Jul 09 Redis
浅谈Redis位图(Bitmap)及Redis二进制中的问题
Jul 15 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
一文搞懂Redis中String数据类型
Apr 03 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
关于Redis的主从复制及哨兵问题
Jun 16 Redis
Redis唯一ID生成器的实现
Jul 07 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
多文件上传的例子
2006/10/09 PHP
php cookis创建实现代码
2009/03/16 PHP
Destoon实现多表查询示例
2014/08/21 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
javascript 写类方式之五
2009/07/05 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
深入浅出分析Python装饰器用法
2017/07/28 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
Django如何重置migration的几种情景
2021/02/24 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
青年教师典范事迹材料
2014/01/31 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android