首页/AI/RAG 与向量库速查/Redis 向量检索能力

Redis 向量检索能力

Redis Stack(RediSearch 模块)提供向量字段与 KNN 查询:HASH/JSON 中存向量与元数据,FT.CREATE 声明向量字段与距离度量,FT.SEARCH 执行近邻查询,可复用现有 Redis 运维体系。

RAG 与向量库速查AI更新于 2026-10-13

Redis 向量检索是什么

Redis Stack 内置的 RediSearch 模块提供向量字段与近邻查询:向量和元数据存在 HASH 或 JSON 里,用 FT.CREATE 声明向量字段(类型、维度、距离度量、算法),再用 FT.SEARCH 的 KNN 表达式做近邻检索。它的价值在于复用已有的 Redis 运维体系(监控、备份、主从与集群),不必为一个新组件单独做运维;代价是过滤聚合能力、索引管理与运维工具不如专用向量库丰富,更适合数据量中等、延迟敏感的场景。

基本信息

依赖Redis Stack(含 RediSearch 模块)
数据形态HASH 或 JSON 文档
向量编码二进制 float32 blob
建索引FT.CREATE ... VECTOR HNSW / FLAT
查询FT.SEARCH ... =>[KNN k @field $vec AS score],需 DIALECT 2
调优HNSW 的 EF_RUNTIME 与 M 影响召回和延迟

典型使用场景

  • 已有 Redis 基础设施,低成本上线中小规模向量检索
  • 相似内容推荐:低延迟、数据量中等、对精确召回要求不极端
  • 缓存与检索共用一份数据,减少组件与同步链路
  • 带标签过滤的近邻查询:先用 TAG 缩小范围再做 KNN
  • 会话、画像这类短生命周期数据,随缓存一起过期清理

建索引

建索引
FT.CREATE idx:kb ON HASH PREFIX 1 kb: SCHEMA
  source TAG                          # 元数据字段,用于过滤
  embedding VECTOR HNSW 6             # 向量字段,HNSW 参数 6 个
    TYPE FLOAT32 DIM 1024 DISTANCE_METRIC COSINE
# 距离度量在建索引时固定,建好后不能修改
# 过滤字段必须先声明,否则无法在查询里按条件缩小范围

KNN 查询逐项读法

要素含义注意
*=>[KNN 5 @embedding $vec AS score]近邻查询表达式过滤条件写在 KNN 之前,语法随 DIALECT 版本变化
PARAMS 2 vec <blob>传入查询向量参数个数写错直接报错
SORTBY score按距离排序要确认度量语义,升序还是降序取决于度量
DIALECT 2启用新版查询语法遗漏会解析失败
EF_RUNTIME运行时候选集大小调大召回上升、延迟上升
向量以二进制 blob 写入:Python 端用 numpy 的 tobytes(),并确认 dtype 为 float32,否则写入成功但检索结果无意义。
距离度量与维度在 FT.CREATE 时确定,建成后只能重建索引修改;换 embedding 模型通常意味着整库重灌。

易错点

  • 向量 dtype 或字节序与索引声明不一致:写入不报错,但近邻结果毫无意义,排查成本极高
  • 查询遗漏 DIALECT 参数:KNN 表达式解析失败,表现为语法报错而不是返回空结果
  • 过滤字段没有声明为 TAG 或没有建索引:带条件的查询退化为全量扫描,延迟随数据量增长
  • 把 Redis 当大集合向量库用:数据量超过单机内存后成本陡增,容量规划要在上线前算清

数据来源与参考

  • Redis 官方文档(Vector similarity search / FT.CREATE)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌