*Redis VRANGE 命令
VRANGE 用于以无状态迭代器的方式,按字典序返回向量集合(Vector Set)中指定范围内的元素。
*语法
VRANGE key start end [count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 向量集合的键名 |
| start | String | 是 | 范围起始点。[ 前缀表示包含,( 前缀表示不包含,- 表示最小元素 |
| end | String | 是 | 范围结束点。[ 前缀表示包含,( 前缀表示不包含,+ 表示最大元素 |
| count | Integer | 否 | 返回的最大元素数量。为负数时返回范围内所有元素 |
*返回值
- Array:按字典序排列的元素数组
- Empty Array:键不存在时返回空数组
*时间复杂度
O(log(K) + M),其中 K 是起始前缀中的元素数量,M 是返回元素数量。实际场景通常为 O(M)。
*示例
*基本用法
> VADD word_embeddings VALUES 3 1 0 1 apple
(integer) 1
> VADD word_embeddings VALUES 3 1 0 1 banana
(integer) 1
> VADD word_embeddings VALUES 3 1 0 1 cherry
(integer) 1
> VRANGE word_embeddings [apple + 10
1) "apple"
2) "banana"
3) "cherry"
*分页迭代
> VRANGE mykey - + 10
1) "apple"
2) "banana"
3) "cherry"
> VRANGE mykey (cherry + 10
1) "date"
2) "elderberry"
*返回所有元素
> VRANGE mykey - + -1
1) "apple"
2) "banana"
3) "cherry"
4) "date"
5) "elderberry"
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数数量不足 | 确保提供 key、start 和 end |
| ERR Invalid range start | start 格式错误 | 使用 [ 或 ( 前缀,或 - |
| ERR Invalid range end | end 格式错误 | 使用 [ 或 ( 前缀,或 + |
*最佳实践
- 分页查询时使用前一批次最后一个元素作为下一次的 start(配合
(前缀实现不包含) - 大数据量时避免使用 count 为负数,可能阻塞服务器
- 并发修改时,每个 VRANGE 调用看到的是命令执行时刻的快照
*FAQ
Q1: VRANGE 和 ZRANGE 有什么区别? A: VRANGE 用于向量集合(Vector Set),按字典序返回;ZRANGE 用于有序集合(Sorted Set),按分数排序返回。
Q2: 迭代过程中数据被修改会怎样? A: 每次 VRANGE 调用返回的是命令执行时刻的快照,新增或删除的元素可能出现在后续调用中也可能不出现。
Q3: count 为负数有什么风险? A: count 为负数会返回范围内所有元素,如果集合很大,会阻塞服务器较长时间,生产环境应避免使用。
Q4: 可以按相似度范围查询吗? A: 不能,VRANGE 只按字典序返回。相似度查询应使用 VSIM 命令。