Redis

Feb 13, 2023
在 Github 中打开

什么是 Redis?

大多数有 Web 服务背景的开发人员可能都熟悉 Redis。从核心上讲,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 运算符的复杂布尔查询
  • 前缀匹配、模糊匹配和精确短语查询
  • 支持 double-metaphone 语音匹配
  • 自动完成建议(带有模糊前缀建议)
  • 多种语言 中基于词干提取的查询扩展(使用 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 的一部分提供。

有关更多信息,请参阅 Redis Enterprise 上的 RediSearch

示例

更多资源

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