热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis(开发与运维):25常用功能之(GEO(地理信息定位))

一、CEO概述Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信
一、CEO概述
  • Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音
  • GEO功能是Redis的另一位作者Matt Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者来自中国,它提供了优秀的GEO功能

二、增加地理位置信息(geoadd)

geoadd key longitude latitude member [longitude latitude member ...]

  • 参数如下:
    • longitude:地址位置的经度
    • latitude:地址位置的纬度
    • member:成员
  • 相关注意事项:
    • geoadd一次可以添加多个地理位置信息
    • geoadd添加成功返回1
    • 如果member已经存在,那么该命令返回0,此时代表更新member的值
  • 例如:下面添加5个城市的经纬度

三、获取地理信息位置(geopos)

geodist key member1 member2 [unit]

  • 该命令用来获取两个地址位置的距离
  • unit参数代表返货结果的单位,包含以下4种:
    • m(meters)代表米
    • km(kilometers)代表公里
    • mi(miles)代表英里
    • ft(feet)代表尺
  • 例如:下面计算天津到北京的距离,以公里为单位

四、获取指定位置范围内的地理信息位置集合(georadius、georadiusbymember)

georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

  • 两个命令作用相同,都是以一个地理位置为中心算出指定半径内的其他地理信息位置
  • 不同的是:
    • georadius命令的中心位置给出了具体的经纬度
    • georadiusbymember只需给出成员即可
  • 其中radiusm|km|ft|mi是必需参数,指定了半径(带单位),其他可选参数意义如下:
    • withcoord:返回结果中包含经纬度
    • withdist:返回结果中包含离中心节点位置的距离
    • withhash:返回结果中包含geohash,有关geohash后面介绍
    • COUNT count:指定返回结果的数量
    • asc|desc:返回结果按照离中心节点的距离做升序或者降序
    • store key:将返回结果的地理位置信息保存到指定键
    • storedist key:将返回结果离中心节点的距离保存到指定键。
  • 例如:下面计算5个城市中,距离北京150公里以内的城市

五、获取geohash

geohash key member [member ...]

  • Redis使用geohash(https://en.wikipedia.org/wiki/Geohash)将二维经纬度转换为一维字符串
  • 例如:下面操作会返回beijing的geohash值

  • geohash有如下特点:
    • GEO的数据类型为zset(见下图),Redis将所有地理位置信息的geohash存放在zset中
    • 字符串越长,表示的位置更精确,下图给出了字符串长度对应的精度,例如geohash长度为9时,精度在2米左右
    • 两个字符串越相似,它们之间的距离越近,Redis利用字符串前缀匹配算法实现相关的命令
    • geohash编码和经纬度是可以相互转换的

  • Redis正是使用有序集合并结合geohash的特性实现了GEO的若干命令

六、删除地理位置信息(zrem)

zrem key member

  • GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以可以借用zrem命令实现对地理位置信息的删除
  • 例如,下面将cities:locations中的所有地理位置信息删除


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统
    本文详细介绍了在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统的步骤。首先,通过“文件”菜单选择“新建虚拟机”并进入自定义设置。接着,在硬盘兼容性选项中选择默认设置。为了更好地进行Linux操作系统的安装练习,建议选择稍后安装操作系统,并在虚拟机安装完成后,根据实际需求删除不必要的硬件组件。此外,本文还提供了详细的配置参数和注意事项,帮助用户顺利完成整个部署过程。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有