*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 组合)。