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

news2025/6/28 4:28:44

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查看哦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 年度国家科学技术奖励公布

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

php goto解密脚本源码

php goto解密脚本源码 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89426171 更多资源下载&#xff1a;关注我。

【数学建模】 函数极值与规划模型

文章目录 函数极值与规划模型1. 线性代数和线性规划的联系1.1 线性代数的基本概念1.2 线性规划的基本概念1.3 线性代数与线性规划的联系矩阵和向量线性方程组单纯形法内点法凸优化 1.4 例子 2. Numpy有关矩阵运算示例2.1 矩阵的创建2.2 矩阵的基本运算2.3 矩阵的合并2.4 矩阵的…

.NET C# 使用OpenCV实现人脸识别

.NET C# 使用OpenCV实现模型训练、人脸识别 码图~~~ 1 引入依赖 OpenCvSHarp4 - 4.10.0.20240616 OpenCvSHarp4.runtime.win - 4.10.0.20240616 2 人脸数据存储结构 runtime directory | face | {id}_{name} | *.jpg id - 不可重复 name - 人名 *.jpg - 人脸照片3 Demo 3.…

搞定求职难题:工作岗位列表+简历制作工具 | 开源专题 No.75

SimplifyJobs/New-Grad-Positions Stars: 8.5k License: NOASSERTION 这个项目是一个用于分享和跟踪美国、加拿大或远程职位的软件工作机会列表。该项目的核心优势和关键特点如下&#xff1a; 自动更新新岗位信息便捷地提交问题进行贡献提供一键申请选项 BartoszJarocki/cv…

SR655 OCP3 网卡Legacy PXE 轮循设置

1、更改UEFI Boot Mode为UEFI&#xff0c;保存重启服务器&#xff0c;再次进入UEFI界面调整如下图例 更改如下所有网卡legacy 为PXE。后将Boot Mode 更改为legacy,保存退出。 如下图例操作依次更改所有网卡口 2、步骤1&#xff0c;更改Boot Mode 为Legacy保存退出重启服器后&…

SAP揭秘者-在QM标准功能增加取消UD的功能第二季

文章摘要&#xff1a; 上篇文章我已经给大家介绍怎么开发两个程序来取消UD&#xff0c;但是上篇文章中有提到这个时候去直接执行ZQEVAC40程序去取消物料凭证 则会报错&#xff0c;那么为了解决这个报错&#xff0c;我们需要更改后台配置。 接下来我给大家讲后台配置该怎么配置&…

Jetpack架构组件_Navigaiton组件_1.Navigaiton切换Fragment

1.Navigation主要作用 方便管理Fragment &#xff08;1&#xff09;方便我们管理Fragment页面的切换 &#xff08;2&#xff09;可视化的页面导航图&#xff0c;便于理清页面间的关系。 &#xff08;3&#xff09;通过destination和action完成页面间的导航 &#xff08;4&a…

Docker 命令——安全

我们将学习两个命令。第一个命令是 docker container run 命令&#xff0c;这样你就能看到使用该命令的一些好处。其次&#xff0c;我们将看看 docker container diff 命令&#xff0c;你可以用它来查看在已有的镜像基础上做了什么。让我们看看如何使用这两个命令来确保容器的安…

【ARM-Linux篇】项目:智能家居

一、项目概述 •项目功能 通过语音控制客厅灯、卧室灯、风扇、人脸识别开门等,可以进行火灾险情监测,可以并且实现Sockect发送指令远程控制各类家电等 •项目描述 全志H616通过串口连接各模块硬件,检测语音的识别结果,分析语音识别的结果来对家电设备进行控制。摄像头拍…

山东大学多核并行2024年回忆版

2024.6.13回忆版 矩阵向量乘不可整除代码 集合通信与点对点通信的区别 块划分、循环划分、循环块划分&#xff08;14个向量&#xff0c;4个进程&#xff09; 按行访问还是按列访问快 SISD系统问题 循环依赖问题 问题&#xff1a;为什么不能对这个循环并行化&#xff0…

Vue移动端动态表单生成组件

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持6个UI框架&#xff0c;适配移动端&#xff0c;并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件&#xff0c;再复杂的表单都可以轻松搞定。 帮助文档 | 源码下载…

科技赋能·创领未来丨智合同和百胜中国就Contract AI Studio项目达成合作

#智合同 #百胜中国 #AIGC #NLP #LLM #Contract AI Studio 近期&#xff0c;国内AIGC和LLM大语言模型发展可谓是如火如荼&#xff0c;其迅速崛起为社会和产业发展起到了非常重要的作用。人们利用AI技术&#xff08;AIGC、LLM大语言模型、NLP等&#xff09;将其赋能到企业生…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

Linux系统安装和卸载nginx

&#x1f4d6;Linux系统安装和卸载nginx ✅下载✅安装✅启动nginx✅安装成系统服务✅常见问题&#xff1a;80端口被占用了✅卸载✅目录结构 以下介绍的是以源码编译安装方式&#xff1a; ✅下载 官方地址&#xff1a;https://nginx.org/en/download.html 123云盘地址&#x…

YOLOv8数据集标注

1 简介 数据集是必不可少的部分&#xff0c;数据集的优劣直接影响训练效果。一般来说&#xff0c;一个完整的数据集应该包括训练集、测试集和验证集。通常&#xff0c;数据集会被划分为训练集和测试集&#xff0c;比如将数据集的70%用作训练集&#xff0c;30%用作测试集。在进行…

【知识学习】Unity3D——Surface Shaderlightning的概念及使用方法示例

Unity3D是一个广泛使用的跨平台游戏引擎&#xff0c;它提供了强大的图形渲染功能。在Unity中&#xff0c;Shader是用于控制图形渲染过程的程序&#xff0c;它们运行在GPU上&#xff0c;用于计算屏幕上每个像素的颜色。Surface Shader和Lighting是Unity Shader编程中非常重要的概…

JAVA期末速成库(7)第七、八章

一、习题介绍 第七章 Check Point&#xff1a;P251 7.2&#xff0c;7.4&#xff0c;7.16&#xff0c;8.2 Programming Exercise&#xff1a;7.10&#xff0c;7.14&#xff0c;7.26 二、习题及答案 Check Point&#xff1a; 7.2 When is the memory allocated for an ar…

群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)

介绍 石墨烯算法是一种新兴的优化算法&#xff0c;灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构&#xff0c;具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移&#xff0c;来求解复杂的优化问题 基本概念…

力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP

Problem: 2741. 特别的排列 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f37b; 暴搜 ⏰ 时间复杂度&#xff1a; O ( N ) O(N) O(N) class Solution {public int specialPerm(int[] nums) {boolean[] visited new boolean[nums.length];return dfs(nums, 0, -1, visit…