*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 命令。