【Redis】特殊数据类型 Geo (地理位置)

news2024/10/6 14:32:21

🎯前言

除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列表的批量操作,如添加多个元素、获取多个元素等。

Redis GEO(Geo Redis)是一个用于存储和操作地理空间数据的 Redis 模块。它提供了一组命令,可以将地理位置数据存储为 Redis 键值,并支持各种地理位置查询和操作。

Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。使用 Redis GEO 可以高效地处理大量的地理位置数据,并且可以与其他 Redis 数据类型(例如列表、哈希表)结合使用,以提供更复杂的地理位置服务。

🎯Geo (地理位置 关命令介绍)

Redis GEO 的常用命令:

  1. GEODEL:删除给定位置上的元素。
  2. GEOADD:向给定位置添加元素。
  3. GEOPOS:获取给定元素的经纬度。
  4. GEORADIUS:半径为 radius 的圆中第一个元素。
  5. GEORADIUSBYMEMBER:在距离给定元素 radius 距离的圆中查找元素。
  6. GEOHASH:获取给定元素的哈希值。 
  7. GEODIST:获取两个元素之间的距离。

🎯Geo (地理位置 相关命令操作)

GEOADD (添加地理位置的坐标)

说明:

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

语法:

GEOADD key longitude latitude member [longitude latitude member ...]
  1. key:要添加点的键值。
  2. longitude:要添加点的经度。
  3. latitude:要添加点的纬度。
  4. member:要添加点的成员属性,可以根据需要进行设置。

示例:

127.0.0.1:6379> GEOADD city 116.403039  39.915351 "beijing" 117.220164  39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEORADIUS city 116 39 1000 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 200 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 120 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379>  GEORADIUS city 116 39 100 km
(empty list or set)
127.0.0.1:6379>

该命令(GEOADD city 116.403039  39.915351 "beijing" 117.220164  39.095583 "tianjin")将beijing和tianjin这两个点添加到city 这个键值下,每个点都由它们的经纬度坐标和成员属性"beijing"和"tianjin"组成。


GEOPOS (获取地理位置的坐标)

说明:

GEOPOS命令用于获取一个或多个点的经纬度坐标。

语法:

GEOPOS key member [member ...]
  1. key:要获取点的键值。
  2. member:要获取点的成员属性,可以根据需要进行设置。

示例:

127.0.0.1:6379> GEOPOS city beijing tianjin nonexistent
1) 1) "116.40304058790206909"
   2) "39.91535036301187489"
2) 1) "117.22016483545303345"
   2) "39.09558351926427378"
3) (nil)
127.0.0.1:6379>

 该命令将返回beijing 和 tianjin这两个点的经纬度坐标。


GEODIST (计算两个位置之间的距离)

说明:

GEODIST命令用于计算两个给定位置之间的距离,以双精度浮点数的形式返回。

语法:

GEODIST key member1 member2 [unit]
  1. key:可以是一个键值,但该参数不是必需的。
  2. member1:要计算距离的位置1的成员属性。
  3. member2:要计算距离的位置2的成员属性。
  4. unit:可以指定返回的距离单位,可以是m(米)、km(千米)、mi(英里)或ft(英尺)。

示例:

127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin m
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin km
"115.0253"
127.0.0.1:6379> GEODIST city beijing tianjin mi
"71.4736"
127.0.0.1:6379> GEODIST city beijing tianjin ft
"377379.7446"
127.0.0.1:6379>

 该命令将返回beijing 和 tianjin这两个点之间的距离,默认单位为米。


GEOHASH (返回一个或多个位置对象的 geohash 值)

说明:

Redis GEO 使用 GEOHASH 来保存地理位置的坐标。GEOHASH  用于获取一个或多个位置元素的 GEOHASH 值。

语法:

GEOHASH key member [member ...]
  1. key:可以是一个键值,但该参数不是必需的。
  2. member1:要计算距离的位置1的成员属性。
  3. member2:要计算距离的位置2的成员属性。

示例:

127.0.0.1:6379> GEOHASH city beijing tianjin
1) "wx4g0f65g20"
2) "wwgq7mjh7b0"
127.0.0.1:6379>

该命令将返回北京和天津这两个点之间的距离。请注意,您需要提供正确的地理位置信息才能正确使用此命令。


GEORADIUS (根据用户给定的经纬度坐标来获取指定范围内的地理位置集合)

说明:

根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

语法:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC
  1. key:要查找的点的键值。
  2. longitude:要查找的点的经度。
  3. latitude:要查找的点的纬度。
  4. radius:可以设置半径的大小,后面需要指定单位,如m、km、ft或mi。
  5. [WITHCOORD]:如果需要,可以使用WITHCOORD选项来返回包含距离计算的点的经纬度坐标。
  6. [WITHDIST]:如果需要,可以使用WITHDIST选项来返回包含距离计算的点的距离。
  7. [WITHHASH]:如果需要,可以使用WITHHASH选项来返回包含距离计算的点的哈希值。
  8. [COUNT count]:如果需要,可以使用COUNT count选项来指定返回的距离计算的点的数量。
  9. [ASC]:如果需要,可以使用ASC选项来指定按距离升序排列返回的距离计算的点。

示例:

127.0.0.1:6379> GEOADD city 116.403039  39.915351 "beijing" 117.220164  39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST
1) 1) "tianjin"
   2) "21.7878"
2) 1) "beijing"
   2) "113.9887"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHCOORD
1) 1) "tianjin"
   2) 1) "117.22016483545303345"
      2) "39.09558351926427378"
2) 1) "beijing"
   2) 1) "116.40304058790206909"
      2) "39.91535036301187489"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST WITHCOORD
1) 1) "tianjin"
   2) "21.7878"
   3) 1) "117.22016483545303345"
      2) "39.09558351926427378"
2) 1) "beijing"
   2) "113.9887"
   3) 1) "116.40304058790206909"
      2) "39.91535036301187489"


GEORADIUSBYMEMBER (在距离给定元素 radius 距离的圆中查找元素)

说明:

GEORADIUSBYMEMBER命令用于计算给定成员属性在指定半径范围内的其他点的距离和坐标。

语法:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES
  1. key:要查找的点的键值。
  2. member:要查找的点的成员属性。
  3. radius:可以设置半径的大小,后面需要指定单位,如m、km、ft或mi。
  4. [WITHCOORD]:如果需要,可以使用WITHCOORD选项来返回包含距离计算的点的经纬度坐标。
  5. [WITHDIST]:如果需要,可以使用WITHDIST选项来返回包含距离计算的点的距离。
  6. [WITHHASH]:如果需要,可以使用WITHHASH选项来返回包含距离计算的点的哈希值。
  7. [COUNT count]:如果需要,可以使用COUNT count选项来指定返回的距离计算的点的数量。
  8. [ASC|DES:如果需要,可以使用ASC选项来指定按距离升序排列返回的距离计算的点,或者使用DES选项来指定按距离降序排列返回的距离计算的点。

示例:

127.0.0.1:6379> GEOADD city 116.403039  39.915351 "beijing" 117.220164  39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC
1) 1) "beijing"
   2) "0.0002"
2) 1) "tianjin"
   2) "115.0255"

举例:如命令(GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC)根据GEORADIUS命令,计算距离北京市中心(经度116.403039,纬度39.915351)200千米范围内其他点的距离,并按照距离升序排列返回最接近的10个点及其距离。

该命令将返回距离北京市中心(经度116.403039,纬度39.915351)200千米范围内的其他点,并按照距离升序排列返回最接近的10个点及其距离。


GEORADIUS 和 GEORADIUS 区别

  • GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
  • GEORADIUS 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUS 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。

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

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

相关文章

Python基于pandas库导出excel文件

将Pandas数据框架导出到Excel文件中 让我们看看如何将Pandas数据框架导出到Excel文件中。 实列代码: import time import pandas as pd from io import BytesIO from flask import make_response,def export_navi():# 所有DataFrame合并集合df_list []# 创建一个数…

理工大学|校企联手创典范,布局存储新未来

某理工大学地质灾害防治与地质环境保护国家重点实验室的前身是1989年由原国家计委、国家教委批准,在某理工大学(原某地质学院)“地质工程”国家重点学科基础上建立的国家专业实验室,该实验室是我国地质灾害防治领域目前唯一的国家…

唯一无副作用禁用Win10/11更新方法,一键暂停1000周

作为一个现代化的系统,Windows 很早便配备了自动更新功能以快速获取新功能、修复安全漏洞。 不过到实际使用中嘛,自动弹出、重启自动进行、新版本大量 Bug … 体验十分糟糕。 种种原因导致,经常就有朋友要禁止 Win10/11 自动更新方法。 我们…

MySQL-存储函数练习

创建表并插入数据 ​ 字段名 数据类型 主键 外键 非空 唯一 自增 ​ id INT 是 否 是 是 否 ​ name VARCHAR(50) 否 否 是 否 否 ​ glass VARCHAR(50) 否 否 是 否 否mysql>…

vue项目启动前端时让本地局域网其他设备访问本项目时的配置

文章目录 编辑package.json优化 编辑package.json "dev": "vite --host [本机ip]" ,案例 优化 这样的话实用性更好,我们访问的话依然可以正常访问服务端的ip "dev": "vite --host 0.0.0.0" ,

Kylin麒麟系统设置开机自动登录roo账户

1.安装麒麟系统后,默认root用户是不开启的,首先得设置root用户密码命令。 sudo passwd root 此时会要求输入密码,输入您当前用户登录密码即可。 2.以root权限修改 /usr/share/lightdm/lightdm.conf.d/60-kylin.conf 文件,如提示输入密码&am…

itheima苍穹外卖项目学习笔记--Day1:项目介绍与开发环境搭建

苍穹外卖 Day1:a. 项目概述b. 开发环境搭建(1). 前端环境搭建(2). 后端环境搭建(3). 前后端联调 c. 完善登录功能d. Swagger Day1: a. 项目概述 b. 开发环境搭建 (1). 前端环境搭建 前端工程基于 nginx 运行启动nginx:双击 nginx.exe 即可启动 nginx 服务&#x…

用C语言进行学生成绩排序(简单选择排序和对堆排序)

一.选择排序 选择排序的基本思想是:每一趟(如第i趟)在后面n-i1 (i1,2…,n-1) 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是历年考…

IDEA配置Maven教程

IDEA配置Maven教程 💕1、mavne的下载💕2、maven的安装💞3、配置Maven环境变量💞4、配置 Maven 本地仓库存放路径💖 5、settings.xml配置;💖6、IDEA配置maven;💖7、清理下…

不容小觑:MES系统上线后绝对不能大意的几点

随着工业自动化和信息化的普及,制造执行系统(MES)已经成为现代制造企业的重要组成部分。然而,即使在实施MES系统之后,企业仍然不能掉以轻心。本文将探讨MES系统上线后需要引起注意的几个方面,以帮助企业更好…

SolidWorks如何切换语言选项

一些工程师的电脑上安装的上英文操作系统,这种操作系统如果安SolidWorks的话,即已经安装上中文语言包,但打开SolidWorks后,其界面还是英文界面。如何在英文Windows操作系统中运行中文版的SolidWorks呢? 照成以上问题可…

Maven下载和配置教程:Windows、Mac和Linux系统安装指南

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

JDBC技术概述

1.1 JDBC技术概述 Java Database Connectivity 简称JDBC,是Java数据库连接的技术。是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 JDBC是Java访问数据库的标准规则,可以为不同的…

数据结构与算法——时间复杂度和空间复杂度(详解版)

在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率。 所谓算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同&#xff0…

记一次 频繁Full GC JVM调优

记一次 频繁Full GC JVM调优 背景 观察服务监控平台的时候发现,几乎 20分钟就会触发一次 Full GC; 问题定位 因为对我们系统JVM参数都很熟悉,所以问题定位很快,通过监控就定位到 每次触发FullGC 的时间 都与MetaSapceSize达到…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成,如下图所示,模块说明如表下所示。 说明如表: 名称说明ClientClient使用H…

统计连续字符-2022年全国青少年信息素养大赛Python国赛第7题

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第9讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计…

2.1 线性表的逻辑结构与存储结构

在之前的数据结构知识铺垫2:物理结构与逻辑结构一文中, 我们介绍了物理结构与逻辑结构, 物理结构即存储结构. 本篇文章我们着重探讨一下线性表的逻辑结构与存储结构. 1. 线性表的逻辑结构 图1. 线性表的逻辑结构 线性表是具有相同特性的数据元素的有限序列, 每个元…

SHELL CLASH配置规则

本地环境 小米AX1800路由器,旧版(黢黑的四方立柱体,没有天线),已降级至固定版本小米 AX1800 1.0.336 问题 因为某些网络原因,在WiFi中安装了shell clash作为互联网代理,使用部分软件时提示网…

ChatGPT在大学里该怎么用?24所英国顶级大学宣布立场!

自从ChatGPT横空出世以来,许多行业都被得到赋能。而在教育行业,许多大学生把它视为写作业的“神器”:节省查阅复杂文献的时间、编写简单的Python代码、辅助学生理解知识点,甚至直接“生成”论文...... 但这些行为,学校…