Redis

Redis是什么?

大多数熟悉Web服务的开发者可能都听说过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是完全托管的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的库是最简单的。以下是一些示例,但您可以在此处找到更多客户端库。

| 项目 | 语言 | 许可证 | 作者 | 星标 |

项目 语言 许可证 作者 星标
jedis Java MIT Redis Stars
redis-py Python MIT Redis Stars
node-redis Node.js MIT Redis Stars
nredisstack .NET MIT Redis Stars

部署选项

有许多方法可以部署带有RediSearch的Redis。最简单的入门方法是使用Docker,但也有许多潜在的部署选项,例如:

集群支持

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

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

示例

更多资源

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