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实现排行榜功能
May 24 Redis
Redis基于Bitmap实现用户签到功能
Jun 20 Redis
了解Redis常见应用场景
Jun 23 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
在项目中使用redis做缓存的一些思路
Sep 14 Redis
为什么RedisCluster设计成16384个槽
Sep 25 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
redis数据结构之压缩列表
Mar 21 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
Apr 03 Redis
解决 redis 无法远程连接
May 15 Redis
一文教你快速生成MySQL数据库关系图
Jun 28 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
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php动态函数调用方法
2015/05/21 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
Promise扫盲贴
2019/06/24 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
Python中一般处理中文的几种方法
2019/03/06 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
次世代生活态度:Hypebeast
2018/07/05 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL