*Redis FT.SUGDEL 命令
FT.SUGDEL 用于从自动补全建议词典中删除一个词条。
*语法
FT.SUGDEL key string
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 自动补全词典的键名 |
| string | String | 是 | 要删除的词条文本 |
*返回值
- Integer: 1 表示删除成功;0 表示词条不存在或词典不存在
*时间复杂度
O(n),其中 n 是词条长度。与词典大小无关。
*示例
*删除词条
> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGDEL ac:products "redis"
(integer) 1
> FT.SUGDEL ac:products "redis"
(integer) 0
*删除不存在的词条
> FT.SUGDEL ac:products "nonexistent"
(integer) 0
*删除后确认词典长度
> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGADD ac:products "redisearch" 0.8
(integer) 2
> FT.SUGLEN ac:products
(integer) 2
> FT.SUGDEL ac:products "redis"
(integer) 1
> FT.SUGLEN ac:products
(integer) 1
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少参数 | 提供 key 和 string 两个参数 |
*最佳实践
- 在词条过期、下架或失效时及时删除,保持词典准确性
- 批量删除时考虑使用 Pipeline 减少网络往返
- 删除操作后词典不会自动释放空间,如需清理空词典可执行
DEL key - 对于敏感内容过滤,可以维护一个黑名单,通过 FT.SUGDEL 从词典中移除
- 删除操作是幂等的,重复删除返回 0 不会报错
*FAQ
Q1: 删除词条后,FT.SUGGET 会立即生效吗? A: 是的,FT.SUGDEL 是原子操作,删除后立即生效,不会返回已删除的词条。
Q2: FT.SUGDEL 会删除所有匹配的词条吗?
A: 只删除完全匹配的单个词条。如果需要清空整个词典,使用 Redis 的 DEL key 命令。
Q3: 删除后词典的内存会立即释放吗? A: 底层数据结构会进行惰性清理,内存可能不会立即释放,但词条已不可访问。
Q4: 如何批量删除多个词条? A: 使用 Redis Pipeline 或 Lua 脚本循环调用 FT.SUGDEL。也可以直接删除整个 key 后重新构建词典。