Redis Vector Search 向量数据库手册
Redis Vector Search 向量数据库手册
适用版本:Redis 8.10.3 稳定版(8.12-rc2 为预发布,勿用于生产),核实于 2026-11 许可与形态:Redis 8+ 为 RSALv2 / SSPLv1 / AGPLv3 三选一(7.2 及以前 BSD-3-Clause);单机 / 集群内存服务,向量能力内置于 Redis Open Source 一句话定位:在已有 Redis 8 实例里直接用
VADD/VSIM或FT.CREATE+FT.SEARCH做向量检索,既不新增数据库,也不再需要 Redis Stack。 约定:$普通用户、#root 或 sudo、<xxx>为占位符;标 ⚠️ 的是高危操作。 更新时间:2026-11(版本与 API 变化快,执行前请以官方文档复核)
目录
1. 它是什么、什么时候选它
1.1 定位与架构
Redis 的向量能力不是独立服务,而是 Redis 8 内置的两套能力:Vector Sets(原生数据类型)+ Redis Query Engine(原 RediSearch,FT.*)。二者都跑在 Redis 进程内,复用现有连接、持久化(RDB / AOF)、复制与集群,无独立进程 / 端口 / 存储。
| 分层 | 形态 | 运维含义 |
|---|---|---|
| 进程层 | 向量命令在 Redis 主线程 / 后台线程执行 | 无额外进程,复用现有实例 |
| 存储层 | Vector Set 是原生类型;Query Engine 的向量存 Hash / JSON | 都在内存中,纳入 RDB / AOF / 复制 |
| 索引层 | Vector Sets 内置 HNSW(默认 Q8/int8 量化);Query Engine 需 FT.CREATE 建二级索引 |
索引随 key 持久化 |
| 接口层 | redis-cli / RESP 协议 | 复用现有客户端,无独立向量端口 |
核心主题:已有 Redis 8 时,向量能力是内置功能,不是再装一个 Redis Stack,也不是再部署 Milvus / Qdrant。官方原文:「Redis 8 in Redis Open Source replaces Redis Stack, so there is no separate module to install or version」。
| 维度 | Redis 向量能力 | 专用向量库 | 索引库(Faiss) |
|---|---|---|---|
| 独立服务 | 否,内置 | 是 | 否 |
| 数据位置 | 内存,与业务 key 同实例 | 独立系统 | 应用自管 |
| 事务 / 标量过滤 | 复用 Redis 数据结构与 Query Engine | 各自 DSL | 无 |
| 持久化 | RDB / AOF / 复制 | 自有机制 | 自行落盘 |
| 规模上限 | 受内存容量约束 | 面向磁盘 / 分布式 | 受单机内存 |
| 延迟 | 内存级,通常很低 | 网络 + 磁盘 | 进程内 |
适合:① 已有 Redis 8 且向量规模能被内存容纳;② 需要极低延迟的在线召回;③ 向量要与 Hash / JSON / TTL / 业务 key 同实例;④ 需要「全文 + 向量」用 FT.HYBRID 一次执行;⑤ RAG 会话级 / 热点数据缓存式检索。
不适合:① 向量规模超大、内存成本不可接受;② 需要磁盘型索引、十亿级分布式分片;③ 需要 GPU 或复杂量化族;④ 现有实例是 Redis 7.2 及以前且不能升级到 8;⑤ 需要强事务型 MVCC(应看 pgvector)。
1.2 规模、链路位置与「何时该换」
| 项 | 经验区间(非官方承诺,须实测) |
|---|---|
| 条数 | 受实例内存约束;Vector Sets 默认 Q8 量化可显著降低单条占用 |
| 维度 | 示例用 2 / 3 维,实际常见 768 / 1024 / 1536;Query Engine DIM 按实际维度定 |
| QPS | 内存级,通常较高,但受 EF、COUNT、大 key 影响,须压测 |
| 持久化 | RDB / AOF / 复制沿用现有配置;索引重建耗时纳入恢复评估 |
链路位置:离线「文档 → Embedding → VADD 或写入 Hash 的 vec 字段」;在线「query → Embedding → VSIM 或 FT.SEARCH ... [KNN ...] → 取回业务属性 → 重排 → LLM / 展示」。Redis 常位于召回 / 缓存层,热点向量与会话态数据同实例。
该换专用向量库的信号:内存成本随向量规模线性上升且不可接受;需要磁盘型 / 十亿级分布式索引;需要复杂重排或 GPU;向量检索要独立隔离、不想与缓存争用内存与 CPU。
2. 版本、许可与官方入口
2.1 版本状态表
| 版本 | 时间 | 状态 | 备注 |
|---|---|---|---|
| 8.10.3 | 2026-10-26 | 最新稳定 / 推荐 | 生产目标 |
| 8.12-rc2 | 官方未标注日期 | 预发布(RC) | 勿用于生产;向量特性待 GA |
| 8.4 | 2025-11 | GA | 新增 FT.HYBRID(全文 + 向量一次执行,RRF 或线性加权) |
| 8.2 | 官方未标注日期 | GA | 增加 SVS-VAMANA 与 WITHATTRIBS |
| 8.0 | 2025-05 | GA | 内置 Vector Sets 与 Query Engine,取代 Redis Stack |
避坑:8.12 是 RC,相关向量特性待 GA,方案与发版公告不要把它写成稳定能力。 版本差异:Redis 8 起 RediSearch / JSON / TimeSeries / Bloom 已内置,Redis Stack 已 EOL;7.2 及以前是 BSD-3-Clause,8+ 改为三选一许可,升级前要评估许可影响。
2.2 许可与官方入口
- 许可:Redis 8+ 为 RSALv2 / SSPLv1 / AGPLv3 三选一;7.2 及以前 BSD-3-Clause。许可变更属升级时的合规事项,以官方许可文本为准。
- 能力边界:Vector Sets 与 Query Engine(原 RediSearch)在 Redis Open Source 中内置,不需要单独模块、不需要单独版本号。
| 类型 | URL |
|---|---|
| Vector Sets 文档 | https://redis.io/docs/latest/develop/data-types/vector-sets/ |
VADD 命令 |
https://redis.io/docs/latest/commands/vadd/ |
VSIM 命令 |
https://redis.io/docs/latest/commands/vsim/ |
FT.CREATE 命令 |
https://redis.io/docs/latest/commands/ft.create/ |
| Query Engine 向量文档 | https://redis.io/docs/interact/search-and-query/advanced-concepts/vectors/ |
| 模块生命周期(Stack EOL) | https://redis.io/docs/latest/operate/rs/installing-upgrading/modules-lifecycle/ |
| Releases | https://github.com/redis/redis/releases |
| 官网 / 镜像仓库 / 控制台 | 官方资料未提供逐字 URL,勿臆测 |
2.3 版本识别与近两年变更
$ redis-cli INFO server # 通用命令,查看 redis_version 字段,确认 ≥8
$ redis-cli COMMAND INFO VADD # 通用命令,确认 Vector Sets 命令可用
| 变更 | 影响 |
|---|---|
| 8.0 GA(2025-05)内置 Vector Sets 与 Query Engine | Redis Stack 不再需要 |
8.2 增加 SVS-VAMANA 与 WITHATTRIBS |
索引 / 属性能力增强 |
8.4 GA(2025-11)新增 FT.HYBRID |
全文 + 向量一次执行,RRF 或线性加权 |
| nmslib 类旧引擎 / Redis Stack 部署方式 | Stack 已 EOL,不沿用 |
3. 安装与启动
3.1 说明与前置条件
本类产品通常已有 Redis 实例,「安装」实为「升级到 8+ 并启用向量能力」。官方资料未提供官方安装命令、镜像 tag 与端口,部署安装以官方文档为准,勿臆测。前置条件:Redis 8+(Vector Sets 为 8.0+ 原生类型);确认许可三选一已评估;确认内存能容纳向量与索引。
避坑:旧教程第一步是「安装 Redis Stack / 加载 RediSearch 模块」。Redis 8 起不再需要,内置即可;照旧教程做会引入多余组件与版本不一致。
3.2 方式一:Vector Sets(原生类型,零配置)
$ redis-cli PING # 连通性
$ redis-cli VADD points VALUES 2 1.0 1.0 pt:A # 首次 VADD 即建立 Vector Set
$ redis-cli VADD points VALUES 2 -1.0 -1.0 pt:B
$ redis-cli VSIM points VALUES 2 0.9 0.9 COUNT 2 WITHSCORES
示例用 2 维(沿用官方 Quickstart),实际常见 768 / 1024 / 1536 维。Vector Sets 内置 HNSW,无需建索引命令。
3.3 方式二:Redis Query Engine(建二级索引)
$ redis-cli FT.CREATE idx ON HASH PREFIX 1 doc: SCHEMA \
vec VECTOR HNSW 6 TYPE FLOAT32 DIM 3 DISTANCE_METRIC COSINE M 16 EF_CONSTRUCTION 200
$ redis-cli FT.SEARCH idx "*=>[KNN 3 @vec $vector AS score]" PARAMS 2 vector <blob> DIALECT 2
示例用 3 维便于阅读,实际常见 768 / 1024 / 1536(官方 Quickstart 示例为
DIM 768)。HNSW 6中 6 的确切含义官方资料未核实,按官方示例写法保留。FT.SEARCH必须带DIALECT 2。
3.4 目录、端口与健康检查
| 项 | 值 | 备注 |
|---|---|---|
| 端口 | 通用默认 6379 | 官方资料未核实,以实际配置为准;无独立向量端口 |
| 数据 / 索引 | Redis 内存 + RDB / AOF | 纳入现有备份与复制 |
| 日志 | Redis 日志(由配置决定) | 无独立向量日志 |
| 配置文件 | 现有 redis.conf | 无需新增模块加载项 |
健康检查:方式一执行 VADD + VSIM 能返回带分数的元素;方式二执行 FT.CREATE + FT.SEARCH 能返回文档。两者互相不能检索对方的数据(见 4.1)。
3.5 生产最小配置建议
认证 / TLS / ACL / 网络暴露面沿用 Redis 基线(通用运维见根目录手册);内存上限与淘汰策略需把向量与 HNSW 索引算进去;RDB / AOF 与复制沿用现有配置,注意大 key 恢复时的索引重建时间。
⚠️ 危险:对存的向量 key 执行
FLUSHALL/ 误设过短 TTL 会导致向量数据整体丢失,属数据丢失级操作,执行前必须确认实例与 key 范围。
4. 核心概念与数据模型
4.1 两套独立 API 横向对照(重点)
| 维度 | Vector Sets | Redis Query Engine(原 RediSearch) |
|---|---|---|
| 命令族 | VADD / VSIM / VCARD / VDIM / VEMB / VGETATTR / VSETATTR / VINFO / VISMEMBER / VLINKS / VRANDMEMBER / VREM |
FT.CREATE / FT.SEARCH(及 FT.HYBRID) |
| 数据存储 | 原生 Vector Set 类型 | Hash / JSON 文档里的向量字段 |
| 索引 | 内置 HNSW,默认 Q8/int8 量化,自动建 | 需 FT.CREATE ... VECTOR 显式建二级索引 |
| 查询 | VSIM key ... |
FT.SEARCH idx "*=>[KNN ...]" |
| 标量过滤 | VSIM 的 FILTER / FILTER-EF |
查询前置条件(逐字语法以官方文档为准) |
| DIALECT | 不需要 | 必须 DIALECT 2 |
| 精确扫描 | VSIM ... TRUTH |
官方资料未提供逐字条目 |
| 引入版本 | 8.0+ 原生类型 | 8.0+ 内置(8.4 起有 FT.HYBRID) |
避坑:
VADD/VSIM与FT.CREATE+FT.SEARCH是两套独立 API,不能混用。VADD写的 Vector Set 不会被FT.SEARCH检索到,FT.CREATE建的索引也管不到 Vector Set;选中一条路径就全程用它。
4.2 命令语法与术语
VADD key [REDUCE dim] (FP32 | VALUES num) vector element [CAS] [NOQUANT|Q8|BIN]
[EF build-exploration-factor] [SETATTR attributes] [M numlinks]
VSIM key (ELE | FP32 | VALUES num) (vector | element)
[WITHSCORES] [WITHATTRIBS] [COUNT num] [EPSILON delta] [EF search-exploration-factor]
[FILTER expression] [FILTER-EF max-filtering-effort] [TRUTH] [NOTHREAD]
| 术语 | 通用术语 | 说明 |
|---|---|---|
| Vector Set / element | 向量集合 / 成员 | 一个 key 即一个集合,成员带唯一名 |
VALUES num |
以数值列表给向量 | 与 FP32(二进制 blob)二选一 |
Q8 / BIN / NOQUANT |
量化档位 | 默认 Q8;三者互斥,仅首次 VADD 生效 |
EF |
探索因子 | VADD 默认 200;VSIM 典型 50–1000 |
M |
HNSW 连接数 | 默认 16 |
TRUTH |
精确扫描 | 强制不走近似索引 |
DIALECT 2 |
查询方言 | Query Engine 向量查询必需 |
- 量化:
Q8默认(int8)、BIN二值、NOQUANT不量化;三者互斥且只在首次VADD时决定,后续VADD改不了。 - FP32 blob 必须 little-endian(小端):用
FP32传二进制向量时必须按小端字节序打包,大端会得到完全错误的距离。 - 距离方向:
VSIM ... WITHSCORES的分数越大越相似;FT.SEARCH的score按DISTANCE_METRIC语义解释(COSINE 下越大越相似)。
4.3 生命周期与一致性
VADD 首次调用即创建集合并按需建 HNSW;后续 VADD 增量插入。FT.CREATE 建索引后,符合 PREFIX 的 Hash / JSON 文档被索引,新写入自动入索引。向量与业务 key 同处 Redis 的持久化 / 复制 / 集群体系;一致性沿用 Redis 的复制模型(异步复制,非强一致事务)。
5. 快速上手:完整 CRUD 示例
示例用 2 / 3 维便于阅读;实际常见 768 / 1024 / 1536 维。
5.1 Vector Sets:完整 redis-cli CRUD
$ redis-cli DEL points
# 1) 插入(首次 VADD 建集合,默认 Q8 量化)
$ redis-cli VADD points VALUES 2 1.0 1.0 pt:A
$ redis-cli VADD points VALUES 2 -1.0 -1.0 pt:B
$ redis-cli VADD points VALUES 2 0.9 0.8 pt:C
# 2) 相似度检索(分数越大越相似)
$ redis-cli VSIM points VALUES 2 0.9 0.9 COUNT 2 WITHSCORES
# 3) 带标量过滤的检索:先设属性,再用 FILTER
$ redis-cli VSETATTR points pt:A '{"category":"tech"}'
$ redis-cli VSETATTR points pt:B '{"category":"life"}'
$ redis-cli VSIM points VALUES 2 0.9 0.9 COUNT 2 WITHSCORES FILTER '<过滤表达式>'
# 4) 强制精确扫描(对照近似结果,验证召回)
$ redis-cli VSIM points VALUES 2 0.9 0.9 COUNT 2 WITHSCORES TRUTH
# 5) 更新:同 element 再 VADD(可带 CAS)
$ redis-cli VADD points VALUES 2 1.0 1.2 pt:A
# 6) 删除成员 7) 查看信息 8) 清理
$ redis-cli VREM points pt:C
$ redis-cli VCARD points
$ redis-cli VDIM points
$ redis-cli VINFO points
$ redis-cli DEL points
FILTER的表达式语法官方资料未给出逐字写法,按VSIM官方文档填写<过滤表达式>;可确认的是它配合FILTER-EF max-filtering-effort控制过滤探索力度。
5.2 Redis Query Engine:完整 redis-cli CRUD
$ redis-cli FT.DROPINDEX idx # 若已存在(首次可跳过)
# 1) 建索引(向量存 Hash 的 vec 字段)
$ redis-cli FT.CREATE idx ON HASH PREFIX 1 doc: SCHEMA \
vec VECTOR HNSW 6 TYPE FLOAT32 DIM 3 DISTANCE_METRIC COSINE M 16 EF_CONSTRUCTION 200 \
category TAG
# 2) 插入文档(vec 为 little-endian FP32 blob)
$ redis-cli HSET doc:1 vec <blob> category tech
$ redis-cli HSET doc:2 vec <blob> category tech
$ redis-cli HSET doc:3 vec <blob> category life
# 3) KNN 检索(必须 DIALECT 2)
$ redis-cli FT.SEARCH idx "*=>[KNN 3 @vec $vector AS score]" PARAMS 2 vector <blob> DIALECT 2
# 4) 带标量过滤的检索:过滤前置条件的逐字语法官方资料未核实,按官方文档构造
# FT.SEARCH idx "<过滤条件>=>[KNN 3 @vec $vector AS score]" PARAMS 2 vector <blob> DIALECT 2
# 5) 更新 6) 删除 7) 清理
$ redis-cli HSET doc:1 vec <new_blob> category tech
$ redis-cli DEL doc:3
$ redis-cli FT.DROPINDEX idx
$ redis-cli DEL doc:1 doc:2
避坑:
<blob>必须是 little-endian FP32,不能是 JSON 数组字符串;FT.SEARCH少了DIALECT 2会失败或行为不符预期。
5.3 输出怎么读与 Python 等价示例
| 字段 | 含义 |
|---|---|
VSIM ... WITHSCORES |
元素名 + 分数,分数越大越相似;COUNT num 控制返回条数 |
FT.SEARCH 返回的文档 id / score |
doc:* 为 Hash key,score 为 KNN 相似度别名 |
WITHATTRIBS(自 8.2.0) |
随结果带回 VSETATTR 设置的属性 |
import struct
import redis
VEC = [1.0, 2.0, 3.0] # 示例 3 维,实际常见 768 / 1024 / 1536
blob = struct.pack("<3f", *VEC) # little-endian FP32:必须小端,勿用大端
r = redis.Redis(host="127.0.0.1", port=6379, decode_responses=False)
res = r.execute_command(
"FT.SEARCH", "idx",
"*=>[KNN 3 @vec $vector AS score]",
"PARAMS", "2", "vector", blob,
"DIALECT", "2",
)
print(res)
避坑:旧教程会写
import redisstack/ 提示先装 Redis Stack,或用struct.pack(">3f", ...)(大端)。Redis 8 不需要 Stack,且 FP32 blob 必须 little-endian。redis客户端属通用第三方库,方法名以所用驱动版本文档为准;redis-cli/ REST 等价示例:本篇主示例已是 redis-cli,无独立 REST 向量接口。
6. 索引与检索进阶
6.1 参数调优表
| 参数 | 默认值 | 影响 | 建议(经验值,实测为准) |
|---|---|---|---|
EF(VADD,构建) |
200 | 建集合探索因子,越大图质量越好 | 保持默认或按规模上调 |
EF(VSIM,查询) |
— | 查询探索因子,典型 50–1000 | 从中小值压测到目标 recall |
M |
16 | HNSW 连接数,越大召回越好、内存越高 | 16 起步 |
Q8 / BIN / NOQUANT |
Q8 | 量化档位,影响精度与内存 | 精度优先用 NOQUANT |
COUNT num |
— | 返回条数 | 按业务 TopK |
EPSILON delta |
— | 半径 / 容差相关 | 按相似度分布调 |
FILTER-EF |
— | 过滤时最大探索力度 | 低命中率过滤时上调 |
FT.CREATE 的 M / EF_CONSTRUCTION |
16 / 200(示例值) | Query Engine 图参数 | 建索引期定,改需重建 |
DIM / DISTANCE_METRIC |
— | 维度与距离度量 | 与写入向量严格一致 |
6.2 recall 与延迟、精确对照
EF / FILTER-EF 是主旋钮,调大 → 召回↑、延迟↑。用 VSIM ... TRUTH 强制精确扫描跑 ground truth,再对同一批 query 算 recall@COUNT,逐步加 EF 到达标。TRUTH 本身是重要的验收工具,不要只在近似模式下凭感觉判断召回。
6.3 过滤、混合检索与多向量
- Vector Sets 过滤:
VSETATTR设属性 +VSIM ... FILTER <expression>+FILTER-EF;属性可用VGETATTR/WITHATTRIBS读回。 - 混合检索:8.4 GA 起
FT.HYBRID支持全文 + 向量一次执行,可用 RRF 或线性加权融合(官方资料未给出逐字参数,按官方文档构造)。 - 多向量 / 稀疏 / 重排:Query Engine 可对多字段建索引;两阶段「ANN 取候选 + 业务权重重排」为经验做法;
SVS-VAMANA(8.2 增加)相关细节官方资料未核实,以官方文档为准。
6.4 量化与容量估算(经验公式,非官方承诺)
FP32 原始向量体积 ≈ 4 × dim 字节;dim=768 → 3072 B ≈ 3.0 KB / 条
Q8(int8)量化后 ≈ 1 × dim 字节 → 约 768 B / 条(约为 FP32 的 1/4)
总量 ≈ 单条体积 × 条数 + HNSW 图连接开销(M 越大越占内存)+ Redis key / 属性开销
BIN 二值、NOQUANT 不量化分别对应更省 / 更占内存
系数为经验区间,非官方承诺;用
MEMORY USAGE <key>/VINFO对真实 key 实测后做容量规划。内存是 Redis 向量方案的首要约束。
7. 生产部署与运维
- 高可用:向量 key 随 Redis 主从复制与集群分片;Vector Set 是单个 key,大集合会落在单分片,需评估热点与内存倾斜(经验性)。
- 备份恢复:RDB / AOF 沿用现有配置;恢复时 Query Engine 索引重建耗时纳入 RTO;
FT.DROPINDEX后需重建索引。 - 监控(沿用 Redis 监控体系,无独立端点):
| 指标 | 关注点 | 告警阈值(经验值) |
|---|---|---|
used_memory / mem_fragmentation_ratio |
向量 + HNSW 占用 | 接近 maxmemory 即扩容 |
命令延迟(VSIM / FT.SEARCH) |
EF / COUNT 过大 |
相对基线翻倍即排查 |
evicted_keys |
淘汰策略误伤向量 key | >0 即排查 maxmemory-policy |
| 复制延迟 / 大 key | Vector Set 恢复 | 沿用集群基线 |
FT.INFO 索引状态 |
Query Engine 索引是否健康 | 索引异常即重建 |
- 扩缩容:以 6.4 估算为起点;内存优先,避免与缓存争用;集群模式注意大 Vector Set 的单 key 限制。
- 升级迁移:升到 8+ 即可获得内置能力;从 Redis Stack 迁移时核对「不再需要单独模块与版本」;许可从 BSD-3-Clause 变为三选一需合规评估。
- 安全 / 日志:ACL、TLS、网络暴露面沿用 Redis 基线;向量命令同样受 ACL 约束(通用运维见根目录手册)。日志由 Redis 配置决定,无独立向量日志。
8. 高频故障与排障
| 症状 | 可能原因 | 定位命令 | 处置 |
|---|---|---|---|
连不上 / 未知命令 VADD |
实例 <8 或未升级 | redis-cli INFO server |
升级到 Redis 8+ |
| 提示需要 Redis Stack / 模块 | 照旧教程部署 | redis-cli MODULE LIST(通用) |
Redis 8 内置,移除 Stack 依赖 |
VADD 写入失败 / 维度不符 |
VALUES num 与向量元素数不一致 |
redis-cli VDIM points |
对齐维度,保持同一集合一致 |
VSIM 结果明显不对 |
FP32 blob 用了大端字节序 |
用 TRUTH 精确扫描对照 |
改 little-endian 打包 |
FT.SEARCH 失败 / 语法错误 |
少了 DIALECT 2 |
检查查询体 | 补 DIALECT 2 |
| 查不到 / 召回低 | FT.SEARCH 查了 VADD 写的数据(混用两套 API) |
TYPE points / FT.INFO idx |
选定一条路径,勿混用 |
| 过滤后结果变少 | FILTER 表达式或 FILTER-EF 过小 |
VSIM ... TRUTH 对照 |
调大 FILTER-EF、核对表达式 |
| 查询慢 | EF / COUNT 过大或大 key |
慢日志 / 延迟监控 | 下调探索因子、拆分集合 |
| OOM / 被淘汰 | 向量 + 索引超 maxmemory | INFO memory / MEMORY USAGE |
扩容、Q8 / BIN 量化、调整淘汰策略 |
| 磁盘满 / AOF 暴涨 | 大向量 key 频繁重写 | 检查 AOF 大小 | 调整持久化策略、错峰重写 |
| 索引不生效 | FT.CREATE 的 PREFIX 与文档 key 不匹配 |
FT.INFO idx |
对齐 PREFIX 1 doc: 与 doc:* |
| 升级后报错 | 8.12 RC 特性 / 旧 Stack 模块残留 | INFO server |
回到 8.10.3 稳定版,清理旧模块 |
| 恢复后查不到 | RDB 恢复后 Query Engine 索引未重建 | FT.INFO idx |
重建索引并纳入 RTO 评估 |
9. 常见坑与避坑清单
- 现象:还在装 Redis Stack / 加载 RediSearch 模块。原因:旧教程沿用 8 以前的做法。怎么做:Redis 8 起不再需要 Redis Stack,能力已内置。
- 现象:
VADD写的数据FT.SEARCH查不到。原因:两套独立 API 不能混用。怎么做:Vector Sets 用VADD/VSIM,Query Engine 用FT.CREATE/FT.SEARCH,全程一致。 - 现象:
FT.SEARCH报语法 / 行为异常。原因:缺DIALECT 2。怎么做:向量查询一律带DIALECT 2。 - 现象:
FP32blob 检索结果完全错。原因:blob 必须 little-endian。怎么做:struct.pack("<3f", ...)小端打包,勿用大端。 - 现象:后续
VADD改NOQUANT/BIN没生效。原因:量化档位仅首次 VADD 生效且三者互斥。怎么做:首个VADD就定好档位,改档需重建集合。 - 现象:近似结果召回不足却判断为「数据少了」。原因:未用精确基线对照。怎么做:
VSIM ... TRUTH强制精确扫描跑 ground truth 再算 recall。 - 现象:文档 / 方案写 Redis 8.12 新特性。原因:8.12 是 RC,向量特性待 GA。怎么做:生产写 8.10.3,RC 能力标注「以官方 GA 为准」。
- 现象:升级后许可不合规。原因:8+ 改为 RSALv2 / SSPLv1 / AGPLv3 三选一。怎么做:升级前做许可评估。
- 现象:
FT.CREATE后搜不到文档。原因:PREFIX与 Hash key 前缀不匹配。怎么做:对齐PREFIX 1 doc:与doc:*。 - 现象:内存被向量撑爆、业务 key 被淘汰。原因:向量与缓存同实例争用内存。怎么做:⚠️ 独立实例或量化,检查 maxmemory-policy,可能引发线上事故。
- 现象:
HNSW 6里的 6 被当成维度或版本。原因:官方资料未核实其含义,易被臆测。怎么做:按官方示例写法保留,勿自行解释。 - 现象:
FLUSHALL/ 短 TTL 后向量全丢。原因:向量就是普通 Redis key。怎么做:⚠️ 确认实例与 key 范围,纳入备份,属数据丢失级操作。
10. 速查表
| 操作 | Vector Sets | Query Engine | 说明 |
|---|---|---|---|
| 连通性 | redis-cli PING |
同左 | 通用 |
| 版本识别 | redis-cli INFO server |
同左 | 确认 ≥8 |
| 建集合 / 索引 | VADD points VALUES 2 1.0 1.0 pt:A |
FT.CREATE idx ON HASH PREFIX 1 doc: SCHEMA vec VECTOR HNSW 6 TYPE FLOAT32 DIM 3 DISTANCE_METRIC COSINE M 16 EF_CONSTRUCTION 200 |
两套入口 |
| 插入 | VADD points VALUES 2 0.9 0.8 pt:C |
HSET doc:1 vec <blob> category tech |
blob 必须小端 |
| 相似度检索 | VSIM points VALUES 2 0.9 0.9 COUNT 2 WITHSCORES |
FT.SEARCH idx "*=>[KNN 3 @vec $vector AS score]" PARAMS 2 vector <blob> DIALECT 2 |
分数越大越相似 |
| 带过滤检索 | VSIM ... FILTER '<表达式>' FILTER-EF <n> |
查询前置条件(以官方文档为准) | 表达式语法未核实 |
| 精确扫描 | VSIM ... TRUTH |
官方资料未提供 | 验收基线 |
| 构建探索因子 | VADD ... EF 200 |
— | 默认 200 |
| 查询探索因子 | VSIM ... EF 100 |
— | 典型 50–1000 |
| 量化档位 | NOQUANT / Q8 / BIN |
TYPE FLOAT32 等 |
仅首次 VADD 生效 |
| 连接数 | VADD ... M 16 |
M 16 |
默认 16 |
| 设 / 读属性 | VSETATTR / VGETATTR |
— | WITHATTRIBS 自 8.2.0 |
| 集合信息 | VCARD / VDIM / VINFO / VISMEMBER |
FT.INFO idx(通用) |
容量与状态 |
| 更新 | 同 element 再 VADD(可带 CAS) |
HSET doc:1 vec <new_blob> |
— |
| 删除 | VREM points pt:C |
DEL doc:3 |
— |
| 混合检索 | 官方资料未提供 | FT.HYBRID(8.4 GA,RRF / 线性加权) |
全文 + 向量 |
| 查看邻居 / 随机 | VLINKS / VRANDMEMBER |
— | 调试用 |
| 取向量 | VEMB |
— | 读回向量 |
| 删索引 | — | FT.DROPINDEX idx |
需重建 |
| 清 key | DEL points |
DEL doc:1 doc:2 |
⚠️ 高危 |
| 端口 / 路径 | 值 | 备注 |
|---|---|---|
| 端口 | 通用默认 6379 | 官方资料未核实,以实际配置为准;无独立向量端口 |
| 数据 / 索引 | Redis 内存 + RDB / AOF | 纳入现有备份 |
| 配置 | 现有 redis.conf | 无需加载额外模块 |
| 日志 | Redis 日志(由配置决定) | 无独立向量日志 |
11. 参考与延伸
官方链接清单:https://redis.io/docs/latest/develop/data-types/vector-sets/ | https://redis.io/docs/latest/commands/vadd/ | https://redis.io/docs/latest/commands/vsim/ | https://redis.io/docs/latest/commands/ft.create/ | https://redis.io/docs/interact/search-and-query/advanced-concepts/vectors/ | https://redis.io/docs/latest/operate/rs/installing-upgrading/modules-lifecycle/ | https://github.com/redis/redis/releases 。官网、镜像仓库、控制台 URL 官方资料未提供,勿臆测。
与同册其他产品的关系:已有 Redis → 本篇;已有 PG → pgvector.md;已有 ES / OpenSearch → Elasticsearch-OpenSearch.md;已有 ClickHouse → ClickHouse.md;已有国产关系库 → 国产数据库向量能力.md;内存放不下 / 需磁盘型分布式 → 01-专用向量数据库 分册。
进阶阅读:VADD / VSIM 完整参数与量化档位;Query Engine 的 FT.CREATE 向量字段与 FT.HYBRID;Redis 8 模块生命周期与许可变更说明。
本篇「未核实 / 以官方为准」事项:
- Redis 8.12(RC)向量特性待 GA(清单第 8 条),生产版本只写 8.10.3。
VSIM的FILTER表达式逐字语法、Query Engine 带过滤查询体的前置条件写法未核实,示例中以占位符标注,按官方文档构造。FT.CREATE ... HNSW 6中 6 的确切含义未核实,按官方示例保留,勿自行解释。SVS-VAMANA(8.2 增加)与FT.HYBRID(8.4 GA)的逐字参数未核实,只写能力与版本。- 8.2 / 8.12-rc2 的具体发布日期未核实(官方资料仅给 8.10.3、8.4、8.0 日期)。
- 官网 / 镜像仓库 / 控制台 URL、安装命令、镜像 tag、HTTP 端口均官方资料未提供,勿臆测;端口 6379 为通用默认值。
redis客户端方法、redis-cli的MODULE LIST/INFO/MEMORY USAGE属通用命令与经验性表述,以所用版本文档为准。- 规模、QPS、容量公式、告警阈值均为经验值,非官方承诺,须实测。