*Redis FT.CURSOR-DEL 命令
FT.CURSOR-DEL 删除 RediSearch 聚合查询游标,释放服务器端资源。
*语法
FT.CURSOR-DEL index cursor_id
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| index | String | 是 | 索引名称(或别名) |
| cursor_id | Integer | 是 | 游标 ID |
*返回值
- OK:游标删除成功
*时间复杂度
O(1)
*
*示例
*删除游标
> FT.AGGREGATE idx:products "*" WITHCURSOR COUNT 10
1) 1) "name"
2) "product1"
2) (integer) 42
> FT.CURSOR-DEL idx:products 42
OK
*清理失效游标
> FT.CURSOR-DEL idx:articles 15
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| Cursor not found | 游标 ID 不存在或已过期 | 确认游标 ID,检查是否已超时 |
*最佳实践
- 使用 WITHCURSOR 后,务必在客户端读取完所有数据或异常时调用 CURSOR-DEL
- 游标有默认超时(MAXIDLE),但显式删除更可靠
- 游标在服务器端占用内存,大量未删除游标会导致内存泄漏
*FAQ
Q1: 游标会自动过期吗? A: 会,默认 MAXIDLE 300000ms(5分钟),可配置。但建议客户端显式删除。
Q2: 删除游标后还能读取吗? A: 不能,删除后后续 FT.CURSOR-READ 会返回错误。
Q3: 游标和索引有绑定关系吗? A: 是的,游标绑定到创建它的索引,删除时需提供相同索引名。
Q4: 连接断开后游标会怎样? A: 连接断开不会自动删除游标,依赖 MAXIDLE 超时机制。高并发场景注意清理。