Redis-Geospatial数据类型及其常用命令详解

1.Redis概述

在这里插入图片描述

2.Geospatial 数据类型

在这里插入图片描述

  • Redis 的 Geospatial 数据类型可以存储地理空间的位置信息和执行地理相关的查询。
  • 比如查找指定半径内的所有位置、计算两个位置之间的距离等。
  • Redis 使用有序集合 (sorted sets) 来实现这些功能。

3.存储和性能

  • Geospatial 数据在 Redis 中实际上是存储在有序集合 (sorted set) 中,每个成员的排序值(score)是经过编码的 Geohash 值。
  • 因此,操作的性能与有序集合的基本操作性能相似。

4.应用场景

  • 查找附近的地点:可以用来查找附近的商店、餐馆、加油站等。
  • 物流和配送:帮助确定哪个仓库或配送中心离客户最近,从而优化配送路线。
  • 社交应用:查找附近的朋友或用户。

5.基本命令

1. GEOADD

在这里插入图片描述

GEOADD 将指定的地理空间位置(经度、纬度、成员)添加到 Redis 中的键中。

该命令的语法支持一些可选参数来控制添加行为。
在这里插入图片描述

语法

GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member ...]
  • key: 存储地理空间数据的键。
  • NX: 只在成员不存在时添加。
  • XX: 只在成员已存在时添加。
  • CH: 修改返回被修改的成员数量。
  • longitude: 经度。
  • latitude: 纬度。
  • member: 成员名称。

参数说明

在这里插入图片描述

  • NX (可选): 仅当成员不存在时才进行添加操作。如果成员已经存在,则不进行任何操作。
  • XX (可选): 仅当成员已经存在时才进行添加操作。如果成员不存在,则不进行任何操作。
  • CH (可选): 返回被修改成员的数量(即添加新成员或更新已有成员)。默认情况下,GEOADD 仅返回添加的新成员的数量,而不包括更新的成员。

示例

在这里插入图片描述

基本使用

在这里插入图片描述

GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"

在这里插入图片描述

使用 NX 参数

仅当成员不存在时添加新位置。

GEOADD locations NX 13.361389 38.115556 "Palermo"

如果 "Palermo" 已经存在,这个命令不会有任何效果。

使用 XX 参数

仅当成员已经存在时更新位置。

GEOADD locations XX 13.361389 38.115556 "Palermo"

如果 "Palermo" 不存在,这个命令不会有任何效果。

使用 CH 参数

返回被修改成员的数量。

GEOADD locations CH 13.361389 38.115556 "Palermo"

如果 "Palermo" 的位置被更新,返回的结果会包含被更新的成员数量。

组合使用 NX 和 CH 参数
GEOADD locations NX CH 13.361389 38.115556 "Palermo"

仅当 "Palermo" 不存在时添加,并返回被添加的成员数量。


2.GEOPOS

在这里插入图片描述
GEOPOS 返回一个或多个成员的地理位置(经度和纬度)。

通过该命令,可以获取存储在 Redis 地理空间索引中的位置数据。

语法

GEOPOS key [member [member ...]]
  • key: 存储地理空间数据的键。
  • member: 一个或多个成员的名字。

返回值

返回一个数组,其中每个元素是相应成员的地理位置(经度和纬度)。

如果某个成员不存在,则其对应位置返回 nil

示例

在这里插入图片描述

假设我们已经使用 GEOADD 命令添加了一些地理位置:

GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"

在这里插入图片描述

在这里插入图片描述

想要获取 "Palermo""Catania" 的地理位置,可以使用 GEOPOS 命令:

GEOPOS locations Palermo Catania
1) 1) "13.36138933897018433"   # Palermo 的经度
   2) "38.11555639549629859"   # Palermo 的纬度
2) 1) "15.08726745843887329"   # Catania 的经度
   2) "37.50266842333162032"   # Catania 的纬度

在这里插入图片描述



3. GEODIST

在这里插入图片描述
GEODIST 计算存储在 Redis 地理空间索引中的两个成员之间的距离。

可以选择使用不同的单位来表示距离。

语法

GEODIST key member1 member2 [M | KM | FT | MI]
  • key: 存储地理空间数据的键。
  • member1: 第一个成员的名字。
  • member2: 第二个成员的名字。
  • [M | KM | FT | MI] (可选): 距离单位。默认是米(meters)。
    • M: 米(默认)。
    • KM: 千米。
    • FT: 英尺。
    • MI: 英里。

返回值

返回两个成员之间的距离。如果任一成员不存在,则返回 nil

示例

在这里插入图片描述
在这里插入图片描述

假设我们已经使用 GEOADD 命令添加了一些地理位置:

GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"

现在我们想要计算 "Palermo""Catania" 之间的距离,可以使用 GEODIST 命令:

GEODIST locations Palermo Catania

默认情况下,距离将以米为单位返回。

如果我们想要以千米为单位返回距离,可以指定单位:

GEODIST locations Palermo Catania KM

同样,可以使用其他单位:

GEODIST locations Palermo Catania FT  # 以英尺为单位
GEODIST locations Palermo Catania MI  # 以英里为单位

4. GEOHASH

在这里插入图片描述

GEOHASH 返回一个或多个成员的 Geohash 值。

Geohash 是一种地理编码方法,将地理坐标转换为字符串形式,便于存储和比较。
在这里插入图片描述

语法

GEOHASH key [member [member ...]]
  • key: 存储地理空间数据的键。
  • member: 一个或多个成员的名字。

返回值

在这里插入图片描述

返回一个数组,其中每个元素是相应成员的 Geohash 值。

如果某个成员不存在,则其对应位置返回 nil

示例

在这里插入图片描述

使用 GEOADD 命令添加了一些地理位置:

GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"

获取 "Palermo""Catania" 的 Geohash 值,可以使用 GEOHASH 命令:

GEOHASH locations Palermo Catania

返回结果如下:

1) "sqc8b49rny0"
2) "sqdtr74hyu0"

在这里插入图片描述


5.GEOSEARCH

在这里插入图片描述
GEOSEARCH 在地理空间索引中搜索符合指定条件的成员。

可以根据给定的条件在地理位置数据中进行搜索,并返回满足条件的成员。

在这里插入图片描述

在这里插入图片描述

语法

GEOSEARCH key
    <FROMMEMBER member>
    <BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM | FT | MI>>
    [ASC | DESC]
    [COUNT count [ANY]]
    [WITHCOORD]
    [WITHDIST]
    [WITHHASH]
  • key: 存储地理空间数据的键。
  • FROMMEMBER member: 指定以哪个成员为中心进行搜索。
  • BYRADIUS radius <M | KM | FT | MI>: 根据给定的半径范围进行搜索,单位可以是米(M)、千米(KM)、英尺(FT)或英里(MI)。
  • BYBOX width height <M | KM | FT | MI>: 根据给定的矩形范围进行搜索,矩形的宽度和高度以及单位。
  • ASCDESC: 指定搜索结果的排序顺序,默认为升序(ASC)。
  • COUNT count [ANY]: 指定返回的成员数量,可选参数 ANY 表示返回的成员数量可能比指定数量稍多或稍少。
  • WITHCOORD: 返回搜索结果的经度和纬度信息。
  • WITHDIST: 返回搜索结果与中心成员的距离信息。
  • WITHHASH: 返回搜索结果的 geohash 信息。

返回值

返回满足搜索条件的成员列表,包括根据设置的选项返回的额外信息。

示例

在这里插入图片描述

  1. 根据给定成员附近的半径范围内搜索:

    GEOSEARCH key FROMMEMBER member BYRADIUS 100 KM WITHCOORD WITHDIST
    

    返回距离 member 成员不超过 100 千米范围内的成员,并包含这些成员的经纬度和距离信息。

  2. 根据给定成员附近的矩形范围内搜索:

    GEOSEARCH key FROMMEMBER member BYBOX 10 20 KM WITHHASH COUNT 5 ANY
    

    返回距member 成员所在矩形区域大小为 10 千米 * 20 千米范围内的至多 5 个成员,并包含这些成员的 geohash 信息。


6.GEOSEARCHSTORE

在这里插入图片描述

GEOSEARCHSTORE 将地理空间搜索结果存储到指定的目标键中。

GEOSEARCH 类似,在地理空间索引中进行搜索,但不同的是,它将搜索结果存储到一个新的键中,而不是直接返回结果。

语法

GEOSEARCHSTORE destination source
    <FROMMEMBER member | FROMLONLAT longitude latitude>
    <BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM | FT | MI>>
    [ASC | DESC]
    [COUNT count [ANY]]
    [STOREDIST]
  • destination: 目标键,用于存储搜索结果。
  • source: 源键,包含地理空间数据。
  • FROMMEMBER member: 指定以哪个成员为中心进行搜索。
  • FROMLONLAT longitude latitude: 使用指定的经纬度作为搜索中心。
  • BYRADIUS radius <M | KM | FT | MI>: 根据给定的半径范围进行搜索,单位可以是米(M)、千米(KM)、英尺(FT)或英里(MI)。
  • BYBOX width height <M | KM | FT | MI>: 根据给定的矩形范围进行搜索,矩形的宽度和高度以及单位。
  • ASCDESC: 指定搜索结果的排序顺序,默认为升序(ASC)。
  • COUNT count [ANY]: 指定返回的成员数量,可选参数 ANY 表示返回的成员数量可能比指定数量稍多或稍少。
  • STOREDIST: 将成员与中心点的距离也存储到目标键中。

返回值

返回添加到目标键中的成员数量。

示例

在这里插入图片描述

  1. 根据指定成员附近的半径范围内搜索并存储结果:

    GEOSEARCHSTORE destKey srcKey FROMMEMBER member BYRADIUS 100 KM
    

    搜索距离 member 成员不超过 100 千米范围内的成员,并将结果存储到 destKey 中。

  2. 根据指定经纬度附近的矩形范围内搜索并存储结果:

    GEOSEARCHSTORE destKey srcKey FROMLONLAT 13.361389 38.115556 BYBOX 10 20 KM
    

    搜索以经纬度 (13.361389, 38.115556) 为中心,矩形区域大小为 10 千米 * 20 千米范围内的成员,并将结果存储到 destKey 中。

  3. 根据指定成员附近的半径范围内搜索并存储结果,包括距离信息:

    GEOSEARCHSTORE destKey srcKey FROMMEMBER member BYRADIUS 50 KM STOREDIST
    

    搜索距离 member 成员不超过 50 千米范围内的成员,并将结果及其与中心点的距离存储到 destKey 中。


更多的Geo命令可以去官网https://redis.io/docs/latest/commands/?group=geo查看哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/747752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL事务】深刻理解事务隔离以及MVCC

文章目录 什么叫事务事务的提交方式常见的事务操作方式事务的开始与回滚总结 事务的隔离设置隔离级别解释脏读解释幻读解释不可重复读为什么可重复读不能解决幻读问题&#xff1f;总结 数据库并发的场景MVCC隐藏列字段undo日志Read view RR和RC的本质区别总结 什么叫事务 在My…

Unity之Hololens2开发MRTK Profile详解

前言 配置 MRTK 的主要方式之一是使用基础包中的配置文件。 场景中的主要 MixedRealityToolkit 对象具有活动配置文件 - 一个 ScriptableObject。 顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。 此外,这些…

最新自助下单彩虹云商城系统源码,含小储云商城模板免授权

最新彩虹商城源码,含小储云商城模板免授权&#xff0c;试用了一下还行&#xff0c;具体的大家可以看看 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89405387 更多资源下载&#xff1a;关注我。

使用VMware创建Ubuntu 24.04【一】

相关链接下载地址 VMware https://www.vmware.com/content/vmware/vmware-published-sites/cn/products/workstation-pro/workstation-pro-evaluation.html.html.html Ubuntu 24.04 LTS https://cn.ubuntu.com/download/desktop 虚拟机创建 1、打开VNware软件&#xff0c;点…

helm搭建prometheus及grafana监控

prometheus-operator 已弃用&#xff0c;更名为 kube-prometheus-stack&#xff0c;以更清楚地反映它安装了 kube-prometheus 项目堆栈&#xff0c;其中 Prometheus Operator 只是一个组件。 原项目地址&#xff1a;https://github.com/helm/charts/tree/master/stable/prometh…

Houdini 通过wedge来做模拟参数对比 (PDG TOP)

我们的设定如下例子 这是个简单的布料悬挂的例子。上方两个角分别被固定住了&#xff0c;然后在distance约束下布料下垂。 我们现在的目的是想要对比不同的streach stiffness对模拟的影响。 第一步&#xff1a;找到stiffness参数&#xff0c;右键expression->edit expre…

惯性级惯导的定位漂移估算

一般来说&#xff0c;惯性级陀螺仪指的是0.01度/小时的零偏稳定性&#xff08;是否可以作为等效常值漂移呢&#xff1f;&#xff09;&#xff0c;其定位误差大约为1海里每小时&#xff0c;其具体估算方法可见秦永元老师的《惯性导航》一书中静基座下系统误差传播特性分析一节内…

《数据赋能:一本书讲透数字化营销与运营》—— 从正确的数据观开始

基于数据打通的“全链路”营销是当下的“时髦”&#xff0c;应用它的前提是什么&#xff1f;深度营销和运营的关键数据如何获得&#xff1f;如何利用数据进行更精准的营销投放&#xff1f;如何利用数据优化投放的效果&#xff1f;如何促进消费者的转化&#xff0c;以及激活留存…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法&#xff0c;相比于Region-based方法&#xff0…

【JavaScript】事件绑定

目录 一、什么是事件 二、常见事件 2.1 鼠标事件 2.2 键盘事件 2.3 表单事件 2.4 页面加载事件 三、浏览器弹窗三种方式 四、事件绑定函数方式 五、事件触发方式 一、什么是事件 事件就是行为动作。在HTML中事件可以是浏览器的行为&#xff0c;也可以是用户的行为。当这些行为发…

零知识证明基础:对称加密与非对称加密

1、绪论 在密码学体系中&#xff0c;对称加密、非对称加密、单向散列函数、消息认证码、数字签名和伪随机数生成器被统称为密码学家的工具箱。其中&#xff0c;对称加密和非对称加密主要是用来保证机密性&#xff1b;单向散列函数用来保证消息的完整性&#xff1b;消息认证码的…

前端实现对本地文件的IO操作

前言 在网页中&#xff0c;前端已经可以读取本地文件系统&#xff0c;对本地的文件进行IO读写&#xff0c;甚至可以制作一个简单的VScode编辑器。这篇文章以渐进式方式实现此功能&#xff0c;文末附上所有代码。 首先看整体功能演示 功能概述 我们将实现一个简单的 Web 应…

Xilinx FPGA:vivado这里记录一个小小的问题

问题描述&#xff1a;uart_data从rx模块输入到ctrl模块后就没有值了。 问题一&#xff1a;首先我仿真例化了两个模块&#xff0c;并且&#xff0c;我选取了单独例化的rx模块中的uart_data 的值&#xff0c;所以在仿真中它是有值的。 timescale 1ns / 1ps module test_bench_TO…

QCC51XX---开启手机log日志

QCC51XX---系统学习目录_trbi200软件-CSDN博客 目录 1.Vivo 2.华为 3.小米 4.三星 5.oppo 1.Vivo *#*#112#*#* 输入命令后会进入log日志系统(由于版本原因,界面可能不同),打开log开关,log就会在后台自动录制。 点击设置,则可进入图1(右边)的界面,可以导出log,导出…

小程序中echarts的bug

这个文字在手机上显示会有黑的的阴影 textStyle: {fontSize: 12,wrap: true,textShadowColor: "#fff", // 文字本身的阴影颜色textShadowBlur: 10, // 文字本身的阴影长度textShadowOffsetX: 10, // 文字本身的阴影X偏移textShadowOffsetY: 10, //阴影Y偏移}

转:关于征集第三批工业软件新场景新技术难题解决思路的公告

工业软件是先进工业知识与经验的凝炼&#xff0c;工业软件自身的先进性既来自对先进工业先进需求的汲取提炼&#xff0c;也来自对根技术新突破、新成果的高效采用。为增强根技术新成果提供方与工业软件厂家或最终用户方的连接&#xff0c;促进国产工业软件差异化竞争力的打造&a…

游戏服务器研究三:bigworld 的 load balance 算法

1. 前言 bigworld 的 load balance 算法的大致思路是知道的&#xff0c;即 动态区域分割 动态边界调整。但具体是怎么实现的&#xff0c;不清楚&#xff0c;网上也不找到相关的文章介绍&#xff0c;所以只能自己看代码进行分析。 本文大致记录我所分析到的算法实现&#xff…

vue3项目登录成功后根据角色菜单来跳转指定页面(无首页)

前言&#xff1a;需求不想要首页&#xff0c;登录什么角色跳转到这个角色经常使用的页面。&#xff08;例如&#xff1a;审核者角色的人输入用户名密码成功后就自动跳转到待审核的页面&#xff0c;仓库管理员登录成功则自动跳转到仓库列表&#xff09; 需要解决的点和想法&…

C语言类型转换理解不同的基本类型为什么能够进行运算

类型转换 1.类型转换1.1隐式转换1.2常用算术转换1.2强制类型转换 1.类型转换 在执行算数运算时&#xff0c;计算机比C语言的限制更多。为了让计算机执行算术运算&#xff0c;通常要求操作数用相同的大小&#xff08;即为的数量相同&#xff09;&#xff0c;但是C语言却允许混合…

SpringBoot优点达项目实战:登录功能实现(四)

SpringBoot优点达项目实战&#xff1a;登录功能实现&#xff08;四&#xff09; 文章目录 SpringBoot优点达项目实战&#xff1a;登录功能实现&#xff08;四&#xff09;1、查看接口2、查看数据库3、代码实现1、创建实体类2、controller实现3、service层实现4、Mapper层 4、测…