*Redis VADD 命令
VADD 用于将向量及其元数据添加到指定的向量集合中。
*语法
VADD key id vector [attribute value ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 向量集合的键名 |
| id | String | 是 | 向量的唯一标识符 |
| vector | Array |
是 | 向量数据(浮点数数组) |
| attribute | String | 否 | 属性名(可多次出现) |
| value | String/Number | 否 | 属性值(需与 attribute 成对出现) |
*返回值
- Integer(1):新向量添加成功
- Integer(0):向量已存在,执行更新
- Error:参数错误、类型不匹配或维度不一致
*时间复杂度
O(d),其中 d 为向量维度
*示例
*基本用法
> VADD user_embeddings user1 [0.1, 0.2, 0.3, 0.4]
1
> VADD user_embeddings user2 [0.5, 0.6, 0.7, 0.8] age 25 city "Beijing"
1
*带属性的向量
> VADD product_vectors sku123 [0.01, 0.99, 0.5] category "electronics" price 1999
1
*更新已存在的向量
> VADD user_embeddings user1 [0.2, 0.3, 0.4, 0.5]
0
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 key、id 或 vector | 检查必传参数 |
| ERR vector dimension mismatch | 向量维度与现有集合不一致 | 确保所有向量维度相同 |
| ERR attribute value pair error | 属性与值未成对出现 | 检查 attribute 和 value 是否一一对应 |
*最佳实践
- 场景:用户画像向量、商品向量、文本嵌入向量存储
- 所有向量必须保持相同维度,否则会导致错误
- 合理设计 id 便于后续查询和删除
- 批量写入时建议使用管道(Pipeline)减少 RTT
*FAQ
Q1: VADD 和 SET 有什么区别? A: VADD 专门用于向量存储,支持浮点数组和属性扩展;SET 仅支持字符串或二进制值。
Q2: 可以添加不同维度的向量到同一个 key 吗? A: 不可以。同一个 key 下的所有向量必须具有相同的维度。
Q3: 属性数量有上限吗? A: 取决于具体实现,通常建议单个向量属性不超过 32 个,以保证查询性能。