我可以使用 Redis 作为向量数据库吗?

最后更新于 2024 年 4 月 22 日

问题

我可以使用 Redis 作为向量数据库吗?

答案

Redis 不仅用于缓存数据,还可以用作强大的向量数据库。如果您不熟悉此概念,以下是如何将 Redis 用作向量数据库的简要概述。请注意,您需要在开发环境中使用 Redis Stack、Redis Enterprise 或 Redis 云;基本 Redis OSS 版本缺少此向量数据库功能。当 Redis 用作向量数据库时,它提供对以下内容的支持:

  1. 存储向量:Redis 可以将浮点数数组存储在哈希或 JSON 文档中。
  2. 索引向量:您可以使用 FLAT 或 HNSW 等方法索引向量,这些方法支持 L2、IP 和 COSINE 等各种距离度量。
  3. 向量搜索:Redis 可以检索相似的向量和关联的文档,并提供基于分数的范围搜索选项。
  4. 混合查询:Redis 支持混合查询,允许您使用全文、数字、标签和地理数据过滤文档。您甚至可以根据这些因素划分向量空间。

如果您已经在使用 Redis,您会发现它可以实现需要向量支持的现代用例。

Redis Stack 概述

Redis Stack 是 Redis 与附加功能和 RedisInsight 的组合。它提供扩展的搜索和查询功能,使使用向量变得更加容易。安装 Redis Stack 可以立即获得这些向量功能。

安装选项

您可以通过多种方式安装 Redis Stack

  • Docker:Docker Hub 上提供了一个官方 Redis Stack 镜像。一个简单的命令可以设置一个新的向量数据库。
  • 平台特定:Redis Stack 可安装在 Linux、Windows 和 MacOS 上。请参阅文档以获取正确的安装方法。
  • Redis 云:Redis 云上提供了一个免费的托管 Redis Stack 实例。虽然其大小有限 (30MB),但它适用于基本用例。对于更大的数据库,Redis 云提供扩展选项。

支持的客户端库

使用标准客户端库,如 redis-pyJedisnode-redisNRedisStack。例如,在 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/