*Redis GEOSEARCHSTORE 命令

将 GEOSEARCH 的搜索结果存入新的 Geo 集合。Redis 6.2+ 引入。


*语法

GEOSEARCHSTORE destination source [FROMMEMBER member] [FROMLONLAT lon lat] [BYRADIUS rad m | km | ft | mi] [BYBOX w h m | km | ft | mi] [ASC | DESC] [COUNT count] [STOREDIST]

*参数说明

参数 类型 必填 说明
destination String 目标 Geo 集合键名
source String 源 Geo 集合键名
FROMMEMBER String 条件 以集合中指定成员为中心
FROMLONLAT Double 条件 以指定经纬度为中心
BYRADIUS Double 条件 圆形半径搜索
BYBOX Double 条件 矩形搜索
ASC 标志 按距离升序
DESC 标志 按距离降序
COUNT Integer 最多返回数量
STOREDIST 标志 将距离作为 score 存入目标集合

*返回值

条件 返回值
成功 存入的 member 数量(Integer)

*时间复杂度

O(N+log(M)),同 GEOSEARCH。


*示例

> GEOADD cities 116.4074 39.9042 "Beijing" 121.4737 31.2304 "Shanghai" 113.2644 23.1291 "Guangzhou"

# 将北京 1000km 范围内的城市存入 nearby_cities
> GEOSEARCHSTORE nearby_cities cities FROMMEMBER Beijing BYRADIUS 1000 km
(integer) 2

# 存入距离作为 score
> GEOSEARCHSTORE nearby_cities cities FROMMEMBER Beijing BYRADIUS 1000 km STOREDIST
(integer) 2

> ZRANGE nearby_cities 0 -1 WITHSCORES
1) "Beijing"
2) "0"
3) "Shanghai"
4) "1067.54"

*常见错误

  1. destination 已存在:会被覆盖。

*最佳实践

  1. 缓存搜索结果:将常用地理位置搜索范围缓存到新的 Geo 集合,避免重复计算。

*FAQ

Q: GEOSEARCHSTORE 和 GEORADIUS 的 STORE 选项有什么区别? A: 功能类似。GEOSEARCHSTORE 是 Redis 6.2+ 推荐的新命令,更灵活(支持 FROMMEMBER/FROMLONLAT 和 BYRADIUS/BYBOX 组合)。