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

🎯前言

除了五中基本的数据类型外,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.hqwc.cn/news/18438.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于c/c++中的isdigit()函数(判断一个字符是不是数字字符)

1&#xff1a;做用&#xff1a;判断一个字符是不是数字字符&#xff08;即&#xff1a;相当于&#xff1a;s[i]>0&&s[i]<9&#xff09; 2&#xff1a;使用方式 char cA; string s"123fgv"; if(isdigit(c)); if(isdigit(s[i]))//返回bool类型 3&…

What Is the Character Limit for ChatGPT? 聊天GPT的字符限制是多少?

The character limit for ChatGPT text prompts is 4096 characters, and there’s also a limit of 4096 tokens per conversation. If you aren’t sure how many tokens your prompt uses, you can calculate that with OpenAI’s Tokenizer tool. ChatGPT 文本提示的字符限…

每周学点数学 3:概率论基础2

文章目录 1.独立性与相关性2.条件概率与边缘概率3.大数定律与中心极限定理4.随机过程5.概率论的应用 1.独立性与相关性 独立性与相关性是在数据分析中非常重要的两个概念&#xff0c;它们之间存在一定的联系&#xff0c;但也有明显的区别。 独立性&#xff08;Independence&…

Vue+element实现el-table行内编辑并校验

el-table行内编辑情况情况概要&#xff1a;之前在开发过程中对于element数据的新增&#xff0c;修改&#xff0c;删除。一般直接结合el-form使用。也就是新增的时候点新增然后出来一个弹框&#xff0c;里面嵌套一个表单&#xff0c;然后保存就好了。这次项目中要求所有的新增&a…

AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试

AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试 Rapid7 Dynamic Application Security Testing (DAST) 请访问原文链接&#xff1a;https://sysin.org/blog/appspider/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin…

【软件测试】Git 远程仓库的使用(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 查看远程仓库 想…

Web入门-HTTP协议

目录 HTTP概述 HTTP特点 HTTP请求协议 请求数据的格式 响应数据的格式 响应的状态码 HTTP协议的解析 HTTP概述 HTTP:Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定浏览器和服务器之间数据传输的规则。(即请求数据和响应数据的格式)以上一篇…

抖音短视频seo源码开发部署-技术分享(四)

一、 抖音短视频seo源码开发流程 抖音短视频SEO源码开发流程如下&#xff1a; 1.分析需求&#xff1a;首先需要明确你的SEO目标。分析竞争对手&#xff0c;了解抖音短视频平台的规则&#xff0c;选定目标关键词和主题。 2.编写代码&#xff1a;根据需求编写代码&#xff0c;…

Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“

上一篇文章是springboot 集成 dubbo&#xff1a; spring boot 集成dubbo_Demonor_的博客-CSDN博客 在集成的时候出现了一些异常&#xff0c;在这里记录一下&#xff0c;并排查出原因 异常信息1&#xff1a; [2m2023-07-11 20:38:39.387[0;39m [32m INFO[0;39m [35m21492[0;…

【Flutter】Flutter 如何使用 flutter_swiper

文章目录 一、前言二、flutter_swiper 的概念三、Flutter 中的 flutter_swiper1. 使用的库2. 方法介绍 四、代码示例1. 简单示例2. 完整示例 五、总结 一、前言 在移动应用开发中&#xff0c;轮播图是一种常见的 UI 元素&#xff0c;它可以用来展示一系列的图片或者内容。在 F…

SQL-每日一题【550.游戏玩法分析Ⅳ】

题目 Table: Activity 编写一个 SQL 查询&#xff0c;报告在首次登录的第二天再次登录的玩家的比率&#xff0c;四舍五入到小数点后两位。换句话说&#xff0c;您需要计算从首次登录日期开始至少连续两天登录的玩家的数量&#xff0c;然后除以玩家总数。 查询结果格式如下所示…

OSS-Fuzz----OSS-Fuzz简介

【原文链接】OSS-Fuzz----OSS-Fuzz简介 一、OSS-Fuzz 简介 OSS-Fuzz是由Google开发和维护的一个开源项目&#xff0c;旨在帮助开发者改善软件的安全性和稳定性。它是一个自动化的模糊测试工具&#xff0c;可以在大规模的测试环境中发现软件中的漏洞和错误。 OSS-Fuzz使用模糊…