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 Cluster原理
Jun 21 Redis
Redis性能监控的实现
Jul 09 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
解决redis批量删除key值的问题
Mar 23 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis特殊数据类型bitmap位图
Jun 01 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 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
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
个人找工作自荐信格式
2013/09/21 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
贷款承诺书范文
2014/05/19 职场文书
常务副总经理任命书
2014/06/05 职场文书
团队口号大全
2014/06/06 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android