*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"
*常见错误
- destination 已存在:会被覆盖。
*最佳实践
- 缓存搜索结果:将常用地理位置搜索范围缓存到新的 Geo 集合,避免重复计算。
*FAQ
Q: GEOSEARCHSTORE 和 GEORADIUS 的 STORE 选项有什么区别? A: 功能类似。GEOSEARCHSTORE 是 Redis 6.2+ 推荐的新命令,更灵活(支持 FROMMEMBER/FROMLONLAT 和 BYRADIUS/BYBOX 组合)。