1. Redis GEO数据结构概述
Redis的GEO(地理空间)数据结构是Redis 3.2版本引入的重要特性,它基于有序集合(Sorted Set)实现,专门用于存储和处理地理位置信息。这个功能在LBS(基于位置的服务)应用中特别实用,比如附近的人、附近的餐厅、共享单车定位等场景。
GEO数据结构本质上使用了有序集合的底层实现,但通过特定的编码方式将经纬度转换为52位的geohash值作为score进行存储。这种设计既继承了有序集合的高效特性,又提供了专业的地理位置计算能力。
注意:虽然GEO使用有序集合存储数据,但直接通过ZSET命令操作GEO数据会导致数据损坏,必须使用专门的GEO命令。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GEO核心命令详解
2.1 基础操作命令
GEOADD:添加地理位置信息
bash复制GEOADD key longitude latitude member [longitude latitude member ...]
示例:
bash复制GEOADD cities 116.404269 39.91582 "北京" 121.47449 31.23037 "上海"
这个命令可以一次添加单个或多个位置信息,经度范围-180到180,纬度范围-85.05112878到85.05112878。
GEOPOS:获取成员位置
bash复制GEOPOS key member [member ...]
返回指定成员的经纬度坐标,对于不存在的成员返回nil。
GEODIST:计算两个位置距离
bash复制GEODIST key member1 member2 [unit]
unit参数可选m(米)、km(千米)、mi(英里)、ft(英尺),默认返回米。
2.2 高级查询命令
GEORADIUS:查询指定半径内的成员
bash复制GEORADIUS key longitude latitude radius unit [WITHDIST] [WITHCOORD] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
这是最常用的附近位置查询命令,参数说明:
- WIT
