*Redis VRANDMEMBER 命令
VRANDMEMBER 用于从向量集合中随机返回一个或多个向量 ID。
*语法
VRANDMEMBER key [count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 向量集合的键名 |
| count | Integer | 否 | 返回的随机向量数量(默认 1) |
*返回值
- String:单个随机向量 ID(未指定 count 或 count 为 1)
- Array:多个随机向量 ID 列表(count > 1)
- Nil:键不存在或集合为空
- Error:键对应的值不是向量集合类型
*时间复杂度
O(k),其中 k 为返回数量
*示例
*基本用法
> VADD items item1 [0.1, 0.2]
1
> VADD items item2 [0.3, 0.4]
1
> VADD items item3 [0.5, 0.6]
1
> VRANDMEMBER items
"item2"
*返回多个随机向量
> VRANDMEMBER items 2
1) "item1"
2) "item3"
*键不存在
> VRANDMEMBER empty_key
(nil)
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 key 参数 | 补充 key |
| ERR count is not a valid integer | count 不是整数 | 检查 count 格式 |
| WRONGTYPE Operation against a key holding the wrong kind of value | key 不是向量集合 | 确认 key 类型正确 |
*最佳实践
- 场景:随机抽样、A/B 测试、数据探索、负样本采样
- count 为正数时返回不重复 ID,负数时允许重复
- 大规模集合中随机采样可用于构建训练数据集
*FAQ
Q1: VRANDMEMBER 和 SRANDMEMBER 有什么区别? A: VRANDMEMBER 用于向量集合,SRANDMEMBER 用于 Redis Set 类型。
Q2: 返回的 ID 是否可能重复? A: count 为正数时不重复;count 为负数时可能重复,绝对值表示返回数量。
Q3: 键不存在时返回什么? A: 返回 nil。