探索Redis特殊数据结构:Geospatial(地理位置)在实际中的应用

news2025/1/24 14:44:57

一、概述

Redis官方提供了多种数据类型,除了常见的String、Hash、List、Set、zSet之外,还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic(HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Configuration)和Time series。这些数据类型在Redis的数据结构中发挥着各自独特的作用。

这些数据类型丰富了Redis的功能,提供了灵活而高效的数据存储和操作方式。在使用时,选择合适的数据类型可以根据实际需求达到更好的性能和效果。

以下主要介绍Geospatial的概念及使用:

Redis 地理空间索引可让您存储坐标并搜索它们。此数据结构对于查找给定半径或边界框内的附近点非常有用。

基本命令

  • GEOADD将位置添加到给定的地理空间索引(请注意,使用此命令时,经度位于纬度之前)。
  • GEORADIUS用于查询地理位置集合中的元素的命令。这个命令可以用于查找给定中心坐标范围内的元素。

这里是完整的Redis Geospatial操作。

二、命令语法

Redis 的 Geospatial 数据类型提供了一种有效的方式来存储地理空间信息,例如地理位置坐标(经度和纬度)以及与之相关的数据。在 Redis 中,这个功能主要由 GEOADD、GEOSEARCH 等命令来实现。以下是这两个命令的介绍及使用方法:

GEOADD 命令:

GEOADD 用于将一个或多个成员的地理位置(经度和纬度)添加到指定的有序集合中。

语法:

GEOADD key longitude latitude member [longitude latitude member ...]
  • key: 指定要添加地理空间成员的有序集合的键名。
  • longitude: 指定成员的经度。使用 WGS84 坐标系,单位是度。
  • latitude: 指定成员的纬度。同样使用 WGS84 坐标系,单位是度。
  • member: 指定地理空间成员的标识。可以是任何字符串,用于标识这个地理位置的相关信息。
  • [longitude latitude member ...]:可以一次添加多个地理空间位置,每个位置需要三个参数,分别是经度、纬度和名称。

Redis Geospatial 使用了WGS84 坐标系来存储和操作地理位置信息。WGS84 坐标系是一种国际通用的地心坐标系,也是 GPS 原始坐标体系12。redis Geospatial 通过 geohash 算法将经纬度坐标转换为一个 52 位的整数,作为有序集合的分数(score)来存储34。这样可以方便地进行距离计算和范围查询。 WGS84(World Geodetic System 1984)是一种用于地球上测量和表示地理坐标的坐标系。它是一种三维坐标系,用经度、纬度和高度(或海拔)来描述地球上的任意点。

GEORADIUS 命令:

GEORADIUS 是 Redis 中用于查询地理位置集合中的元素的命令。这个命令可以用于查找给定中心坐标范围内的元素。以下是 GEORADIUS 命令的详细参数说明:

GEORADIUS key longitude latitude radius m|km|mi|ft [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE destination-key] [STOREDIST destination-key]
  • key: 指定地理位置集合的键名。
  • longitudelatitude: 指定中心点的经度和纬度。这是查询的中心坐标。
  • radius: 指定搜索的半径范围。
  • m|km|mi|ft: 指定半径的单位,可以是米(m)、千米(km)、英里(mi)、或英尺(ft)。
  • WITHCOORD: 返回结果中包括被查询成员的经度和纬度信息。
  • WITHDIST: 返回结果中包括成员距离中心的距离。
  • WITHHASH: 返回结果中包括成员的 52 位有符号整数 geohash 值。
  • COUNT count: 限制返回结果的数量。
  • ASC|DESC: 指定排序顺序,升序(ASC)或降序(DESC)。
  • STORE destination-key: 将查询结果存储到另一个有序集合中。
  • STOREDIST destination-key: 将查询结果存储到另一个有序集合,并包括成员距离中心的距离。

三、应用示例

为了简单实现记录出租车坐标位置和查询附近出租车,我们可以使用 Redis 命令行工具进行演示。以下是一些示例步骤:

步骤 1: 记录出租车坐标位置

使用 GEOADD 命令记录出租车坐标位置。在这个例子中,我们使用了经度和纬度的虚构值。

# 记录士A的坐标位置
127.0.0.1:6379> GEOADD taxis 13.361389 38.115556 "TaxiA"

# 记录士B的坐标位置
127.0.0.1:6379> GEOADD taxis 15.087269 37.502669 "TaxiB"

# 记录士C的坐标位置
127.0.0.1:6379> GEOADD taxis 9.191383 45.464211 "TaxiC"

步骤 2: 查询附近出租车

使用 GEORADIUS 命令查询附近一定范围内出租车。

# 查询离指定坐标 (13.37, 38.11) 50 公里范围内出租车
127.0.0.1:6379> GEORADIUS taxis 13.37 38.11 50 km WITHDIST WITHCOORD

在这个示例中,我们查询了距离指定坐标 (13.37, 38.11) 50 公里范围内出租车,并返回了每个出租车车牌号(成员)、距离、以及经纬度信息。

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

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

相关文章

「Linux」用户操作

root用户 su:切换账户 语法:su [–] [用户名] -:可选,表示是否在切换用户后加载环境变量,建议带上用户名:表示要切换的用户,省略时表示切换到root切换用户后,通过exit命令退回上一个…

HTTP基本概念-HTTP 是什么?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 是什么? HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。 能否详细解释「超文本传输协议」? HTTP 的名字「超文本协议传输」,它可以拆成三个部分: 超文本传输…

vue安装使用less,解决与webpack的冲突

第077个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 提供vue2的一些基本操作:安装、引用,模板使用,computed&a…

HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL

下载资源 对于这款图形化工具,博主建议通过小皮面板(phpstudy)来下载即可,也是防止你下载到钓鱼软件,小皮面板(phpstudy)如果你不懂是什么,请看下面链接这篇博客 第二篇:…

EMC学习笔记(二十六)降低EMI的PCB设计指南(六)

降低EMI的PCB设计指南(六) 1.PCB布局1.1 带键盘和显示器的前置面板PCB在汽车和消费类应用中的应用1.2 敏感元器件的布局1.3 自动布线器 2.屏蔽2.1 工作原理2.2 屏蔽接地2.3 电缆屏蔽至旁路2.4 缝隙天线:冷却槽和缝隙 tips:资料主要…

蓝牙BLE学习-概述

1. 简介 1.1 蓝牙发展历程 蓝牙,直接来自于一位国王的名字--King Harald ‘Bluetooth Gromsson。这位国王因两件事留名于史,其一是在公园958年统一了丹麦和挪威,其二是在其死后,其牙齿呈现出暗蓝色的颜色,因而得名蓝牙…

OpenCV-36 多边形逼近与凸包

目录 一、多边形的逼近 二、凸包 一、多边形的逼近 findContours后的轮廓信息countours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近。 apporxPolyDP就是以多边形去逼近轮廓,采用的是Doug…

《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)

文章目录 3.1 Linux 文件系统结构3.1.1 重点基础知识3.1.2 重点案例:设置一个 Web 服务器3.1.3 拓展案例 1:日志文件分析3.1.3 拓展案例 2:备份用户数据 3.2 理解文件权限3.2.1 重点基础知识3.2.2 重点案例:共享项目文件夹3.2.3 拓…

网络编程项目:电子辞典

项目要求: 登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。单词查询功能历史记录功能,存储单词,意思,以及查询时间,存储在数据库基于TCP,支持多客户端连接&#x…

python安装cv2失败

问题:安装cv2包失败 解决方法: pip install opencv-python或在Anaconda中conda install opencv-python

二、DataX安装

DataX安装 一、简介二、系统要求三、部署 一、简介 官方地址:https://github.com/alibaba/DataX/blob/master/userGuid.md 二、系统要求 LinuxJDK(1.8以上,推荐1.8) Centos7.9的java1.8安装命令:yum install java-1.8.0-openjdk.x86_64 Py…

【Java程序设计】【C00254】基于Springboot的java学习平台(有论文)

基于Springboot的java学习平台(有论文)) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的学习平台 本系统分为系统功能模块、管理员功能模块、教师功能模块以及学生功能模块。 系统功能模块:在平台…

【国产MCU】-CH32V307-基本定时器(BCTM)

基本定时器(BCTM) 文章目录 基本定时器(BCTM)1、基本定时器(BCTM)介绍2、基本定时器驱动API介绍3、基本定时器使用实例CH32V307的基本定时器模块包含一个16 位可自动重装的定时器(TIM6和TIM7),用于计数和在更新新事件产生中断或DMA 请求。 本文将详细介绍如何使用CH32…

大话设计模式——1.模板方法模式(Template Method Pattern)

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 例子:比较重大的考试往往有A、B两套试卷,其中一套出现问题可以立马更换另一套。 定义基…

金融信贷风控系统设计

前言 近一年多以来在金融行业负责风控系统,根据自己工作中的经验,写下这篇文章。既是对自己在风控领域工作的总结,也是给刚入行和准备入行的朋友打个样,希望能有所帮助。 为什么要有风控系统 记得 2016 年信贷行业的发展形势还…

NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由

NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由 哈喽小伙伴们好,我是Stark-C~ 关注我的小伙伴都知道,我之前有分享过我的创作过程与工具,其中介绍了我个人其实一直都是使用Markdown的编辑器来进行图文创作的。 我…

多机多卡运行nccl-tests和channel获取

nccl-tests 环境1. 安装nccl2. 安装openmpi3. 单机测试4. 多机测试mpirun多机多进程多节点运行nccl-testschannel获取 环境 Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic x86_64)cuda 11.8 cudnn 8nccl 2.15.1NVIDIA GeForce RTX 4090 *2 1. 安装nccl #查看cuda版本 nv…

shiny,一个好用的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个好用的 Python 库 - shiny。 Github地址:https://github.com/posit-dev/py-shiny Python Shiny 是一个用于创建交互式 Web 应用程序的开源库,它基于 Flask 和 React 技…

[JavaWeb玩耍日记]Maven的安装与使用

目录 一.作用 二.安装 三.使用 2.对项目使用compile命令进行编译,看看新的文件会在哪里产生? 3.需要认识的命令 4.Maven对项目执行不同命令的生命周期特点? 5.如何导入工程外的Maven? 6.如何直观地查看Maven导入了哪些工程或哪些jar包…

行业科普应用分享 | 用于安全和安保的仪器仪表

【前言】 物联网带来了对安全和安保的新要求。利用物联网,运营商可以从复杂和分布式的装置中获益。此外,自主系统在现代工业的运作中正变得越来越重要。 从制造业到农业,这些远程操作需要仪器提供持续监测,以提供安全和保障。这…