热门标签 | 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中的所有地理位置信息删除


推荐阅读
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 理解UML的重要性及其应用
    探讨为什么大多数开发人员难以成为架构师,介绍从现实世界到业务模型的抽象过程,并详细解释UML在软件设计中的关键作用。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 本文探讨了如何利用NFC技术,将存储在Android手机中的患者信息安全高效地传输到台式计算机。重点介绍了适用于医院场景的NFC USB读卡器(如ACR122U)的应用方法。 ... [详细]
  • 优化使用Apache + Memcached-Session-Manager + Tomcat集群方案
    本文探讨了使用Apache、Memcached-Session-Manager和Tomcat集群构建高性能Web应用过程中遇到的问题及解决方案。通过重新设计物理架构,解决了单虚拟机环境无法真实模拟分布式环境的问题,并详细记录了性能测试结果。 ... [详细]
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社区 版权所有