*Redis FT.SUGLEN 命令
FT.SUGLEN 用于返回自动补全建议词典中的词条数量。
*语法
FT.SUGLEN key
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 自动补全词典的键名 |
*返回值
- Integer: 词典中的词条总数;若 key 不存在返回 0
*时间复杂度
O(1)
*
*示例
*查看词典长度
> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGADD ac:products "redisearch" 0.9
(integer) 2
> FT.SUGLEN ac:products
(integer) 2
*空词典
> FT.SUGLEN ac:empty
(integer) 0
*删除后更新长度
> FT.SUGADD ac:products "redis" 1.0
(integer) 1
> FT.SUGLEN ac:products
(integer) 1
> FT.SUGDEL ac:products "redis"
(integer) 1
> FT.SUGLEN ac:products
(integer) 0
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 key 参数 | 提供词典键名 |
*最佳实践
- 使用 FT.SUGLEN 监控词典大小,过大的词典可能影响查询性能
- 在批量导入前检查词典长度,确认增量导入是否正确执行
- 定期监控词典增长趋势,设置告警阈值(如超过 10 万条时审查)
- 可作为清理任务的判断条件:若词典过长,触发归档或删除低频词条的逻辑
- 在 Redis 监控面板中将各模块的词典长度作为指标展示
*FAQ
Q1: FT.SUGLEN 返回的是唯一词条数还是包含重复? A: 返回唯一词条数。FT.SUGADD 添加已存在的词条不会增加 SUGLEN(除非使用 INCR 时内部行为不同,但词条计数仍不变)。
Q2: 删除整个词典后 FT.SUGLEN 会怎样?
A: 如果使用 DEL key 删除整个 key,再次调用 FT.SUGLEN 会返回 0。
Q3: FT.SUGLEN 和 Redis 的 LLEN/HLEN 有什么区别? A: FT.SUGLEN 专用于自动补全词典(RediSearch 的 Suggestion 结构),底层是前缀树(Trie)结构,不是 Redis 原生 List 或 Hash。
Q4: 词典大小对性能有影响吗? A: 有一定影响,但 FT.SUGGET 的复杂度主要是 O(log n + m),其中 n 是词典大小。通常情况下,百万级别的词典仍能快速响应。