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 12 Redis
redis 查看所有的key方式
May 07 Redis
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
详解Redis复制原理
Jun 04 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
在项目中使用redis做缓存的一些思路
Sep 14 Redis
解决linux下redis数据库overcommit_memory问题
Feb 24 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 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
延长phpmyadmin登录时间的方法
2011/02/06 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
前台js调用后台方法示例
2013/12/02 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
JSONP之我见
2015/03/24 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python设计模式之单例模式实例
2014/04/26 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
英语演讲稿范文
2014/01/03 职场文书
综合内勤岗位职责
2014/04/14 职场文书
预备党员公开承诺书
2014/05/28 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
2022年四月新番
2022/03/15 日漫
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技