简单地说,我们现在是Redis

了解更多

JSON文档的索引,查询和全文搜索与Redis

到目前为止,RedisJSON和reresearch是云计算中最受欢迎的Redis模块。(见图1)RedisJSONRediSearch(与Redis绑定)被拉出2000次以上每一天。这就是为什么我们认为Redis的技术传教士Itamar Haber在4年前编写第一版时是一个有远见的人。4月份,我们做了几个公告在RedisConf与JSON、索引和全文搜索功能相关。今天,我们很高兴地宣布这些功能的私人预览。

在这篇博客中,我们将概述当前的RedisJSON功能。之后,我们将深入这个私有预览的新功能部分。使用reresearch在JSON文档上建立索引、查询和使用全文搜索的能力是这个版本最酷的新特性。最后,我们将向您展示如何快速入门。

模块的矩形
图一:Redis云数据库使用至少一个模块(2021年5月)

JSON的能力

当你没有RedisJSON时,你可以通过使用String数据结构在Redis中建模嵌套文档。

但是,如果我们需要更新文档的一个子部分呢?

为了保持操作的原子性,我们需要:

  1. 为文档
  2. 阅读之前的版本并对其进行反序列化
  3. 将更新嵌入到Redis事务中
  4. 序列化为JSON并更新文档
  5. 执行事务

如果在此过程中另一个客户端更新了文档,我们可能需要重试所有这些步骤。

然而,有了RedisJSON,我们可以完成这个更新使用单个原子事务

让我们看另一个例子,在这个例子中,您有一个大JSON,但在应用程序中只需要该文档的一个子部分。

没有RedisJSON:

你必须:

  1. 检索整个json字符串,序列化为字符串
  2. 反序列化JSON
  3. 提取所需的子部分

使用RedisJSON,您可以只用一个命令检索您需要的数据,从而最小化CPU周期、网络开销,最重要的是,延迟。

如您所见,RedisJSON简化了JSON文档操作。RedisJSON的当前GA版本(v1.0)是社区已经广泛使用的版本,它解决了用String数据结构建模嵌套结构的缺点。下面是它的一些关键功能的概述。

在Redis中存储(或更新)一个与key相关的JSON文档

替换子部件(如。键的字符串值)

向集合或映射添加项

提取整个文档

使用JSONPath的子集提取它的一部分

RedisJSON 2.0:私有预览版

我们在RedisConf 2021年发布了这个版本,今天我们很高兴地宣布,它可以作为一个私人预览版提供给精选的Redis企业客户,并作为发布候选版本提供给我们的社区。万博体育彩这个版本有三个主要特性,即,完全支持JSONPath表达式,支持Active-Active(与Redis Enterprise),以及使用RediSearch对JSON文档进行索引、查询和全文搜索的能力。万博体育彩但还有更多!让我们来看看新的好东西。

重写在生锈

系统编程语言是一个以效率为导向的语言家族。用这些语言编写的程序通常是轻量级的,并提供最好的性能。这是的原因为什么Redis一直以来都是用c写的,这也解释了为什么Redis能够实现极低的延迟和高吞吐量。大多数Redis模块是用C、c++或Rust编写的,这些语言属于同一家族。

JSON在Rust社区得到了非常好的服务,包括非常快速和高效JSON连载JSONPath实现.给Redis用户提供这些实现的好处是显而易见的,只是需要一个映射在Redis模块API和Rust之间。

完全支持JSONPath

下面是RUST重写的好处。这个新版本包含了对JSONPath的全面支持。现在可以使用JSONPath表达式的所有表达性。

给定一个JSON文档

通配符(以前仅限于第一项)

提取物片

一个更高级的过滤器表达式示例

支持主

active - active是Redis Enterprise提供的功能。万博体育彩Active-Active允许您将数据库复制到多个地理分布的Redis Enterprise集群中。万博体育彩用户可以使用本地读写延迟连接到最近的集群。

实现基于无冲突复制数据类型(CRDT)技术。虽然Redis支持的大多数核心数据结构都实现了它,但Redis开发了强大的知识和经验,为JSON做的新实现证实了这一点。

应用程序开发人员现在可以ag万博下载万博最新版本下载苹果依靠它来使用JSON文档构建地理分布的应用程序。下面是一个带有两个集群的active-active环境中的一系列操作示例:

集群

让我们看看每个操作的细节:

  • T1:客户端在Cluster 1上设置JSON文档。
  • T2:同步过程复制群集2上的文档。
  • T3:两个集群包含相同的文档。
  • T4:一个客户端将蓝色添加到Cluster 1中的colors数组中,同时,另一个客户端将绿色添加到Cluster 2中的相同数组中。
  • T5:同步进程合并两个集群上的操作并更新文档。
  • T6:两个集群包含相同的文档。

当这个功能出现在公共预览版时,我们将详细说明所有同步流程,但如果您对这个功能感兴趣,请立即访问support@www.szfbf.com与我们联系。

RediSearch 2.2:私有预览版

本博客还宣布了RediSearch 2.2的私人预览版(作为Redis企业用户选择组的私人预览版,并作为我们社区的发布候选版)。万博体育彩

在本节中,我们将描述reresearchch新版本提供的新特性。但首先,我们将同时发布这两个流行模块的原因如下:

JSON文档的索引、查询和全文搜索

这个特别的新功能将把Redis的JSON功能提升到一个全新的水平。RediSearch已经不仅仅是一个Key-Value存储,到目前为止,RediSearch已经提供了对散列的索引和搜索功能。在幕后,RedisJSON 2.0公开了一个内部公共API。内部的,因为这个API是暴露给其他模块运行在一个Redis节点。Public,因为任何模块都可以使用这个API。reresearch2.2也是如此!

通过将其功能暴露给其他模块,RedisJSON为redisresearch提供了索引JSON文档的能力,因此用户现在可以通过索引和查询内容来查找文档。这些组合模块给你一个功能强大、低延迟、面向json的文档数据库

我们来看看会是什么样子。

我们应该首先使用JSON填充数据库的JSON文档。设置命令。

要创建一个新的索引,我们使用FT.CREATE命令。索引的模式现在接受JSONPath表达式。表达式的结果被编入索引,并与一个属性相关联(这里是:title)。

现在我们可以使用FT.SEARCH进行搜索查询并找到JSON文档:

JSON文档聚合

聚合是RediSearch的一个强大特性,可用于创建分析报告或执行分面搜索样式的查询。现在RediSearch可以访问JSON文档,可以使用JSONPath表达式从JSON文档加载任何值,并在管道中使用它,无论该值是否被索引。

让我们创建一个索引:

向数据库添加一个JSON文档:

然后使用从JSON文档中提取的两个数值进行简单的计算:

索引策略更灵活

使用新版本的reresearch,现在可以用不同的参数索引相同的值(哈希值上的字段,或者JSON文档中的JSON值)。下面是一个典型的用例,由这个新特性解决:

让我们有一个包含属于类别的文档的数据库。

使用TAG类型,你可以轻松过滤任何类别的搜索结果:

但是,如果您还想对类别进行全文搜索,该怎么办呢?

到目前为止,对于散列,您必须将值复制到两个字段中,这将消耗两倍的内存。

这就是FT.CREATE…AS变得更加方便的地方。让我们回到我们漂亮而简单的文档:

并使用新的AS功能:

…和…

宾果!我们现在可以通过标签进行过滤,并在同一字段中进行全文搜索,而不必复制数据。

查询分析

大多数Redis命令的时间复杂度都有很好的文档记录。作为一个例子,HMGET复杂度为O(N),“其中N是请求的字段数量”。使用RediSearch,可以编写高级查询。然而,FT.SEARCH和FT.AGGREGATE命令的复杂性取决于查询的复杂性。

我们希望为您提供一些工具,帮助您理解在执行查询时发生了什么,以便找出在哪里消耗了时间,以及如何优化查询。新FT.PROFILE命令返回一个树,其中显示RediSearch执行查询所使用的主要步骤。对于每一步,给出一个时间信息。

那么当我们使用模糊搜索进行查询时,reresearchch内部会发生什么呢?

让我们来看一个例子:

我们已经准备好剖析我们的查询了。让我们运行分析并分解分析结果。

复述。cloud:6379> FT.PROFILE idx SEARCH LIMITED QUERY "%hello%"

首先我们得到结果。用于检查分析查询是否返回预期的结果。

这里是总时间,称为“配置文件时间”,因为它包括收集配置文件信息所花费的时间。

解析查询和构建执行计划所花费的时间:

以下是在字典中查找模糊匹配所花费的时间:

最后,你有没有想过建立一个搜索结果意味着什么?我们需要为每个文档计算全文分数,按分数对它们进行排序,最后加载字段。通过这些信息,您可以识别瓶颈,提高查询速度,并提高服务器的性能。

如何开始

我们相信这些新功能将改变应用开发者和Redis社区的游戏规则。万博最新版本下载苹果ag万博下载你可以从这里开始。

使用预览的docker图像

为了开始你可以拉以下码头工人形象使用:preview标签:

Docker运行-p 6379:6379 redis/redismod:preview

或者,您可以从RC1发布标记(v2.2.0RediSearch,v2.0.0对于RedisJSON),并加载它们到Redis。

一旦您启动并运行,您可以尝试以上所有命令或使用这个快速入门指南.我们还将推出一系列关于RedisMart,这是我们展示的一个在线零售应用程序在RedisConf 2021的主题演讲中.RedisMart以地理分布方式部署RedisJSON和redisresearch,以提供最佳的在线零售体验。在本系列中,我们将逐步指导您如何构建这个应用程序。

使用最新版本的兼容客户端进行开发

下面的客户端列表目前正在升级,以便您能够使用新特性,并提供良好的开发体验。检查最新的版本和/或拉请求(目前他们中的大多数都支持主分支的预览版本)。

RedisJSON RediSearch
node . js redis-modules-sdk redis-modules-sdk
Java JredisJSON JRediSearch
net NRedisJSON NRediSearch
Python redisjson-py redisearch-py

加入社区

我们欢迎任何反馈,bug报告,功能请求,而我们的工作朝着通用可用性。在文档网站或github存储库中留下反馈RediSearch(在Github)或RedisJSON(在Github),或于年月日与我们联络不和

Baidu