我可以将 Redis 用作向量数据库吗?
最后更新于 2024 年 4 月 22 日
问题
我可以将 Redis 用作向量数据库吗?
回答
Redis 不仅用于缓存数据,它还可以用作功能强大的向量数据库。如果您不熟悉这个概念,以下是关于如何将 Redis 用作向量数据库的简要介绍。请注意,您的开发环境中需要使用 Redis Stack、Redis Enterprise 或 Redis Cloud;基本的 Redis OSS 版本不具备此向量数据库功能。将 Redis 用作向量数据库时,它支持以下功能:
- 存储向量:Redis 可以将浮点数数组存储在 Hash 或 JSON 文档中。
- 索引向量:您可以使用 FLAT 或 HNSW 等方法索引向量,这些方法支持各种距离度量,例如 L2、IP 和 COSINE。
- 向量搜索:Redis 可以检索相似向量和相关文档,并提供基于分数的范围搜索选项。
- 混合查询:Redis 支持混合查询,允许您使用全文、数字、标签和地理数据过滤文档。您甚至可以基于这些因素对向量空间进行分区。
如果您已经在使用 Redis,您会发现它能够支持需要向量的现代用例。
Redis Stack 概览
Redis Stack 是 Redis 与附加功能和 RedisInsight 的结合。它提供了扩展的搜索和查询功能,使使用向量变得更加容易。安装 Redis Stack 后,即可获得这些向量功能。
安装选项
您可以通过多种方式安装 Redis Stack
- Docker:Docker Hub 上提供了官方的 Redis Stack 镜像。一个简单的命令即可设置一个新的向量数据库。
- 特定平台:Redis Stack 可以安装在 Linux、Windows 和 MacOS 上。请查阅文档以获取正确的安装方法。
- Redis Cloud:在 Redis Cloud 上可免费使用托管的 Redis Stack 实例。虽然大小有限(30MB),但适用于基本用例。对于更大的数据库,Redis Cloud 提供扩展选项。
支持的客户端库
利用标准的客户端库,例如 redis-py、Jedis、node-redis 或 NRedisStack。例如,在 Python 中为字段 content_embedding
指定的向量创建索引就像遵循此语法一样简单
index_def = IndexDefinition(prefix=["data:"])
schema = (TagField("url"),
TagField("category"),
TextField("content"),
VectorField("content_embedding", "HNSW", {"TYPE": "FLOAT32", "DIM": 384, "DISTANCE_METRIC": "L2"}))
conn.ft('data_idx').create_index(schema, definition=index_def)
如果您使用 Python,请了解更多关于向量搜索的信息。
生产环境中的向量数据库
使用 Redis Stack 从开发环境过渡到生产阶段是可行的。然而,如果您希望利用生产质量、托管和多租户环境——通过内置的自动扩展支持每秒数亿次操作——将您的工作负载迁移到 Redis Enterprise 或 Redis Cloud 可能更有优势。这些选项可以无缝替代 Redis Stack,使您能够将应用程序无缝指向 Redis Enterprise 或 Redis Cloud 数据库,而无需进行任何调整。有关设置生产配置的详细说明,请参见文档。
参考资料
通过以下链接了解更多关于在生产环境中使用 Redis 作为向量数据库的信息:https://redis.com/solutions/use-cases/vector-database/