什么是 Redis?
大多数有 Web 服务背景的开发人员可能都熟悉 Redis。从核心上讲,Redis 是一个开源的键值存储,可以用作缓存、消息代理和数据库。开发人员选择 Redis 是因为它速度快,拥有庞大的客户端库生态系统,并且已被各大企业部署多年。
除了 Redis 的传统用途之外,Redis 还提供了 Redis 模块,这是一种使用新功能、命令和数据类型扩展 Redis 的方法。示例模块包括 RedisJSON、RedisTimeSeries、RedisBloom 和 RediSearch。
部署选项
有许多部署 Redis 的方法。对于本地开发,最快的方法是使用 Redis Stack docker 容器,我们将在本文中使用它。Redis Stack 包含许多 Redis 模块,这些模块可以一起使用以创建快速、多模型数据存储和查询引擎。
对于生产用例,最简单的入门方法是使用 Redis Cloud 服务。Redis Cloud 是一项完全托管的 Redis 服务。您还可以使用 Redis Enterprise 在您自己的基础设施上部署 Redis。Redis Enterprise 是一项完全托管的 Redis 服务,可以部署在 Kubernetes、本地或云端。
此外,每个主要的云提供商(AWS Marketplace、Google Marketplace 或 Azure Marketplace)都在市场中提供 Redis Enterprise 产品。
什么是 RediSearch?
RediSearch 是一个 Redis 模块,为 Redis 提供查询、二级索引、全文搜索和向量搜索。要使用 RediSearch,您首先需要在 Redis 数据上声明索引。然后,您可以使用 RediSearch 客户端查询该数据。有关 RediSearch 功能集的更多信息,请参阅 RediSearch 文档。
功能特性
RediSearch 使用压缩的倒排索引进行快速索引,且内存占用量低。RediSearch 索引通过提供精确短语匹配、模糊搜索和数值过滤等众多功能来增强 Redis。例如:
- Redis 哈希中多个字段的全文索引
- 无性能损失的增量索引
- 向量相似度搜索
- 文档排序(使用 tf-idf,带有可选的用户提供的权重)
- 字段权重
- 使用 AND、OR 和 NOT 运算符的复杂布尔查询
- 前缀匹配、模糊匹配和精确短语查询
- 支持 double-metaphone 语音匹配
- 自动完成建议(带有模糊前缀建议)
- 在 多种语言 中基于词干提取的查询扩展(使用 Snowball)
- 支持中文分词和查询(使用 Friso)
- 数值过滤器和范围
- 使用 Redis 地理空间索引 进行地理空间搜索
- 强大的聚合引擎
- 支持所有 utf-8 编码的文本
- 检索完整文档、选定字段或仅文档 ID
- 结果排序(例如,按创建日期)
- 通过 RedisJSON 支持 JSON
客户端
鉴于 Redis 周围庞大的生态系统,很可能存在您需要的语言的客户端库。您可以使用任何标准的 Redis 客户端库来运行 RediSearch 命令,但最简单的方法是使用包装 RediSearch API 的库。以下是一些示例,但您可以在此处找到更多客户端库。
项目 | 语言 | 许可证 | 作者 | 星标 |
---|---|---|---|---|
jedis | Java | MIT | Redis | |
redis-py | Python | MIT | Redis | |
node-redis | Node.js | MIT | Redis | |
nredisstack | .NET | MIT | Redis |
部署选项
有许多使用 RediSearch 部署 Redis 的方法。最简单的入门方法是使用 Docker,但有很多潜在的部署选项,例如
- Redis Cloud
- 云市场:AWS Marketplace、Google Marketplace 或 Azure Marketplace
- 本地部署:Redis Enterprise Software
- Kubernetes:Kubernetes 上的 Redis Enterprise Software
- Docker (RediSearch)
- Docker (Redis Stack)
集群支持
RediSearch 具有分布式集群版本,可以扩展到跨数百台服务器的数十亿个文档。目前,分布式 RediSearch 可作为 Redis Enterprise Cloud 和 Redis Enterprise Software 的一部分提供。
有关更多信息,请参阅 Redis Enterprise 上的 RediSearch。
示例
- 产品搜索 - 电子商务产品搜索(带有图像和文本)
- 使用 DocArray / Jina 的产品推荐 - 使用 Redis 和 DocArray 的基于内容的产品推荐示例。
- RecSys 中的 Redis VSS - 3 个端到端 Redis 和 NVIDIA Merlin 推荐系统架构。
- Azure OpenAI Embeddings 问答 - Azure 上的 OpenAI 和 Redis 作为问答服务。
- ArXiv 论文搜索 - 对 arXiv 学术论文进行语义搜索
更多资源
有关如何将 Redis 用作向量数据库的更多信息,请查看以下资源
- Redis 向量相似度文档 - Redis 向量搜索官方文档。
- Redis-py 搜索文档 - Redis-py 客户端库 RediSearch 文档。
- 向量相似度搜索:从基础到生产 - VSS 和 Redis 作为 VectorDB 的入门博文。
- AI 驱动的文档搜索 - 涵盖 AI 驱动的文档搜索用例和架构的博文。
- 向量数据库基准测试 - Jina AI VectorDB 基准测试,比较 Redis 与其他数据库。