2023年2月13日

Redis

本文已归档,可能包含过时信息。文中所述方法、模型或技术为撰写时的最新内容,但可能已不再代表最佳实践或最新发展。

什么是Redis?

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

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

部署选项

有多种方式可以部署Redis。对于本地开发而言,最快的方法是使用Redis Stack docker容器,这也是我们将在此采用的方式。Redis Stack包含多个Redis模块,这些模块可以协同工作,构建一个快速的多模型数据存储和查询引擎。

对于生产环境用例,最简单的入门方式是使用Redis Cloud服务。Redis Cloud是一个全托管的Redis服务。您也可以通过Redis Enterprise在自有基础设施上部署Redis。Redis Enterprise是一个可在kubernetes、本地或云端部署的全托管Redis服务。

此外,每个主要云服务提供商(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格式

Clients

鉴于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作为向量数据库的信息,请查阅以下资源: