Redis 数据类型Geospatial Indexes(地理空间索引)

目录

[1 基本特性](#1 基本特性)

[2 主要操作命令](#2 主要操作命令)

[2.1 GEOADD key longitude latitude member [longitude latitude member ...]](#2.1 GEOADD key longitude latitude member [longitude latitude member ...])

[2.2 GEOPOS key member [member ...]](#2.2 GEOPOS key member [member ...])

[2.3 GEODIST key member1 member2 [unit]](#2.3 GEODIST key member1 member2 [unit])

[2.4 GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]](#2.4 GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key])

[2.5 GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]](#2.5 GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key])

[2.6 GEOHASH key member [member ...]](#2.6 GEOHASH key member [member ...])


Redis 的地理空间索引(Geospatial Indexes)提供了一种高效的方式来存储和查询地理位置信息,允许你存储地理位置信息,并提供了多种操作来处理这些数据,比如计算两点之间的距离、查找给定半径内的点等,这种数据类型非常适合需要处理与位置相关的应用,例如地图服务、基于位置的服务(LBS)、实时跟踪等。

1 基本特性

  • 高效的空间查询:Redis 使用高效的算法来执行范围查询和距离计算。它能够在很短的时间内找到指定半径内的所有点,这对于实时应用非常有用。

  • 低内存占用:通过使用 GeoHash 和其他压缩技术,Redis 能够在存储大量地理位置信息时保持较低的内存占用。每个位置通常只需要少量字节来表示。

  • 支持多种操作:除了基本的添加和查询功能外,Geospatial Indexes 还支持距离计算、坐标获取、GeoHash 编码等操作。这些功能使得它能够满足各种基于位置的应用需求。

  • 精确度与性能平衡:在默认情况下,Redis 使用的 GeoHash 精确到约 1 米左右。这为大多数应用场景提供了足够的精确度,同时保证了良好的性能。用户可以根据需要调整精确度,以达到精确度和性能的最佳平衡。

基本概念:

  • 坐标:在 Redis 中,一个地理位置由经度和纬度表示。
  • 成员:每个地理位置可以关联一个名称或标识符,称为成员。
  • 距离单位:支持的距离单位包括米(m)、千米(km)、英里(mi)和海里(ft)。

2 主要操作命令

2.1 GEOADD key longitude latitude member [longitude latitude member ...]

添加一个或多个地理位置到指定的键中。每个地理位置由经度、纬度和成员名组成。如果键不存在,则创建新键。

复制代码
127.0.0.1:6379> geoadd mycity 120.753466 31.222895 "shanghai" 116.407394 39.904111 "beijing"
(integer) 2
2.2 GEOPOS key member [member ...]

获取一个或多个成员的地理位置(经纬度)。

复制代码
127.0.0.1:6379> geopos mycity shanghai beijing
1) 1) "120.75346559286117554"
   2) "31.22289421634820172"
2) 1) "116.40739649534225464"
   2) "39.90411140939136914"
2.3 GEODIST key member1 member2 [unit]

计算两个成员之间的距离,默认单位是米。可以使用 m(米)、km(千米)、mi(英里)或 ft(英尺)来指定其他单位。

复制代码
127.0.0.1:6379> geodist mycity shanghai beijing
"1042208.3193"
127.0.0.1:6379> geodist mycity shanghai beijing km
"1042.2083"
2.4 GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

类似于 GEORADIUS,但是以某个已存在的成员作为中心点。以给定的经纬度为中心,返回半径内的所有成员。可以附加选项来获取额外的信息,如距离、哈希值或排序结果。

复制代码
127.0.0.1:6379> georadius mycity 120.753466 31.222895 500 km withdist
1) 1) "shanghai"
   2) "0.0001"
2.5 GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

以给定的成员位置为中心,返回半径内的所有成员。用法与 GEORADIUS 类似,只是中心点是通过成员名称指定的。

复制代码
127.0.0.1:6379> georadiusbymember mycity shanghai 500 km withdist
1) 1) "shanghai"
   2) "0.0000"
2.6 GEOHASH key member [member ...]

返回一个或多个成员的 Geohash 编码。Geohash 是一种将经纬度编码为短字符串的方法,便于快速比较和搜索。

复制代码
127.0.0.1:6379> geohash mycity shanghai beijing
1) "wttcegcyx90"
2) "wx4g0bm62c0"

更多命令请参考:Commands | Docs

相关推荐
想摆烂的不会研究的研究生7 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
码熔burning7 小时前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
猫头虎7 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
哈库纳玛塔塔8 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
@LetsTGBot搜索引擎机器人9 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐10 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、
Tony Bai10 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
wb0430720111 小时前
SQL工坊不只是一个ORM框架
数据库·sql
至善迎风12 小时前
Redis完全指南:从诞生到实战
数据库·redis·缓存