首页 > 数据库 >地理位置存储方案——Redis GEO

地理位置存储方案——Redis GEO

时间:2024-08-15 10:26:17浏览次数:11  
标签:存储 地理位置 位置 Redis key latitude GEO

地理位置存储方案——Redis GEO

场景

假设我们需要开发一个代驾程序,司机端的小程序实时把自己的GPS定位上传,然后定位信息缓存到Redis里面。咱们怎么能利用Redis计算出,上车点方圆几公里的司机都有谁呢?这就需要使用Redis的Geo功能。

Redis Geo官方文档:https://redis.io/docs/latest/develop/data-types/

引入

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。

操作

下面我们用GEOADD命令向Redis里面添加几个景点的定位。

geoadd

geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

geoadd 语法格式如下:

GEOADD key longitude latitude member [longitude latitude member ...]

执行下面的bash命令,添加3个位置信息。

GEOADD gugong 116.403963 39.915119 tiananmen 116.417876 39.915411 wangfujing 116.404354 39.904748 qianmen

在这里插入图片描述

georadius

georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
georadius 语法格式如下:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • WITHDIST: 在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和纬度也一并返回。
  • WITHHASH: 以 52位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。

然后我们GEORADIUS命令查询距离某个定位点1公里范围以内的景点有哪些。

GEORADIUS gugong 116.4000 39.9000 1 km WITHDIST

在这里插入图片描述

总结

既然Redis的GEO命令可以帮我们提取出某个坐标点指定距离以内的景点,如果Redis里面缓存的是司机的定位信息,那么我们用代驾单的起点坐标来查询附近几公里以内的司机,是不是也可以?而且Redis的Geo计算是在内存中完成的,比MySQL的Geo计算快了上千倍。

标签:存储,地理位置,位置,Redis,key,latitude,GEO
From: https://blog.csdn.net/weixin_43344005/article/details/141201232

相关文章

  • Java 中的线程本地存储(ThreadLocal)机制介绍
    Java中的ThreadLocal是一个用于实现线程本地存储(ThreadLocalStorage,TLS)的机制。它可以为每个线程提供独立的变量副本,使得一个线程中的变量不受其他线程中的变量的影响。ThreadLocal通常用于在多线程环境下避免线程之间共享数据,从而实现线程安全。一、基本用法ThreadLoca......
  • Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
    一、安装包下载直接从官网下载,官网下载链接地址:Downloads-Redis二、安装步骤2.1说明RedisDesktopManager是一款简单快速、跨平台的Redis桌面管理工具,也也被称作Redis可视化工具。支持命令控制台操作,以及常用,查询key、rename、delete等操作。2.2安装步骤2.2.1双击运......
  • 解决启动redis:应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。
    解决处理方法如下目录方法一......
  • Redis实战
    短信登录这一块我们会使用redis共享session来实现商户查询缓存通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容优惠卷秒杀通过本章节,我们可以学会Redis的计数器功能,结合Lua完成高性能的......
  • 【Azure 存储服务】Azure文件能实现的功能及业务场景的系列问题
    问题一:Azure文件提供的部署方式,云部署/本地部署?当前可用的是哪种方式Azure文件存储可以用于替换或补充传统的本地文件服务器或连接到网络的存储(NSA)设备。Azure文件是云服务,存储的文件都在AzureCloud里,开通本地防火墙445端口(运行在portal上自动生成的powershell脚本),就可以......
  • Redis集群:概念和部署示例
    目录Redis集群的优点集群模式主从模式缺陷哨兵模式缺陷集群模式(RedisCluster)数据分片原理添加节点删除节点Redis集群的分片方式故障转移机制如果Master只有一个Slave如果Master有多个Slave如果两个Slave票数一样呢?Redis集群部署案例案例拓扑图集群部署步骤......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版获取word指定位置的值
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯longarch芯片架构。查看本示例演示效果本示例关键代码的编写位置,请参考“开始-快速上手”里您所使用的开发语言框架的最简集成代码注意本文中展示的......
  • redis-stack安装
    下载:https://github.com/redis-stack/redis-stack/releases/tag/v7.2.0-v10 Linux解压后重命名为redis-stack放到opt目录port6379protected-modenodaemonizenorequirepass密码loadmodule/opt/redis-stack/lib/rediscompat.soloadmodule/opt/redis-stack/lib/re......
  • 发现并处理Redis的大Key和热Key
    大Key和热Key的定义名词解释大Key通常以Key的大小和Key中成员的数量来综合判定,例如:Key本身的数据量过大:一个String类型的Key,它的值为5MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有2,000个......
  • Java开发中使用腾讯云OCR进行身份证识别与COS云存储实践
    文章目录完整代码代码讲解总结在Java开发中,处理身份证识别和云存储是一项常见的需求,尤其是在需要用户身份验证的应用场景中。今天,我想和大家分享一个实际的案例,展示如何利用腾讯云的OCR服务进行身份证识别,并将识别到的身份证信息上传到云存储中。完整代码以下......