跳到主要内容

Redis

什么是 Redis?

大多数有 Web 服务背景的开发者可能对 Redis 并不陌生。Redis 本质上是一个开源的键值存储系统,可用作缓存、消息代理和数据库。开发者选择 Redis 是因为它速度快、拥有庞大的客户端库生态系统,并且多年来已被众多大型企业部署使用。

除了传统的用途,Redis 还提供了 Redis 模块,这是一种通过新功能、命令和数据类型扩展 Redis 的方式。例如模块包括 RedisJSONRedisTimeSeriesRedisBloomRediSearch

部署选项

部署 Redis 有多种方式。对于本地开发,最快的方法是使用 Redis Stack Docker 容器,我们将在本文中使用它。Redis Stack 包含多个 Redis 模块,可以组合使用,创建一个快速的多模型数据存储和查询引擎。

对于生产环境,最简单的入门方法是使用 Redis Cloud 服务。Redis Cloud 是一个完全托管的 Redis 服务。你也可以使用 Redis Enterprise 在自己的基础设施上部署 Redis。Redis Enterprise 是一个完全托管的 Redis 服务,可以在 Kubernetes、本地或云中部署。

此外,每个主要的云服务提供商(AWS MarketplaceGoogle MarketplaceAzure Marketplace)都在其市场产品中提供了 Redis Enterprise。

什么是 RediSearch?

RediSearch 是一个 Redis 模块,为 Redis 提供查询、二级索引、全文搜索和向量搜索功能。要使用 RediSearch,首先需要在 Redis 数据上声明索引,然后可以使用 RediSearch 客户端查询这些数据。有关 RediSearch 功能集的更多信息,请参阅 RediSearch 文档

功能

RediSearch 使用压缩的倒排索引,实现快速索引且内存占用低。RediSearch 索引通过提供精确短语匹配、模糊搜索和数值过滤等功能增强了 Redis。例如:

  • Redis 哈希中多个字段的全文索引
  • 无性能损失的增量索引
  • 向量相似性搜索
  • 文档排名(使用 tf-idf,可选用户提供的权重)
  • 字段加权
  • 使用 AND、OR 和 NOT 运算符的复杂布尔查询
  • 前缀匹配、模糊匹配和精确短语查询
  • 支持 双元音音标匹配
  • 自动完成建议(带模糊前缀建议)
  • 多语言的词干查询扩展(使用 Snowball
  • 支持中文分词和查询(使用 Friso)
  • 数值过滤和范围
  • 使用 Redis 地理空间索引 的地理空间搜索
  • 强大的聚合引擎
  • 支持所有 utf-8 编码文本
  • 检索完整文档、选定字段或仅文档 ID
  • 排序结果(例如,按创建日期)
  • 通过 RedisJSON 支持 JSON

客户端

鉴于 Redis 庞大的生态系统,很可能有你需要的语言的客户端库。你可以使用任何标准的 Redis 客户端库来运行 RediSearch 命令,但使用封装了 RediSearch API 的库最为方便。以下是一些示例,但你可以在 这里 找到更多客户端库。

项目语言许可证作者星标
jedisJavaMITRedisStars
redis-pyPythonMITRedisStars
node-redisNode.jsMITRedisStars
nredisstack.NETMITRedisStars

部署选项

部署带有 RediSearch 的 Redis 有多种方式。最简单的入门方法是使用 Docker,但还有许多其他潜在的部署选项,例如:

集群支持

RediSearch 有一个分布式集群版本,可以扩展到数十亿文档,跨越数百台服务器。目前,分布式 RediSearch 作为 Redis Enterprise CloudRedis Enterprise Software 的一部分提供。

更多信息请参见 RediSearch on Redis Enterprise

示例

更多资源

有关如何将 Redis 用作向量数据库的更多信息,请查看以下资源: