我们现在,简单地,redis

了解更多

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

redisresearch和RedisJSON私有预览版提供了实时文档功能和active-active支持。



回到博客

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

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

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

json能力

当您没有RediSJSON时,您可以使用字符串数据结构模拟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:私有预览版本

我们宣布在重新isconf 2021上的此版本,今天我们很高兴地宣布它作为我们社区的选择小组的私人预览,以及我们社区的候选人。万博体育彩此版本有三个主要功能,即jsonpath表达式的全部支持,支持主动活动(带redise企业),以及索引,查询和使用json文档的全文搜索的能力与重新搜索。万博体育彩但还有更多!让我们潜入新的好吃的东西。

重写锈

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

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

完全支持jsonpath

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

给定一个JSON文档

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

提取物片

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

支持主动活动

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

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

应用程序开发人员现在可以ag万博下载万博最新版本下载苹果依赖于使用JSON文档构建地理分布式应用程序。以下是一个具有两个群集的活动活动环境中连续操作的示例:

簇生

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

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

当此功能在公共预览中时,我们将详细阐述所有同步流程,但如果您对此功能感兴趣,请随时立即触摸Support@www.szfbf.com。

RediSearch 2.2:私有预览版

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

在本节中,我们将描述此新版本的重新搜索提供的新功能。但首先,这是我们一起将这两个流行模块发布的原因:

索桑文档的索引,查询和全文搜索

这个特别的新功能将把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文档聚合

聚合是重新搜索的强大功能,可用于创建分析报告或执行面位搜索样式查询。现在重新启动可以访问JSON文档,可以使用JSONPath表达式从JSON文档加载任何值,并在管道中使用该值是否索引。

让我们创建一个索引:

将JSON文档添加到数据库:

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

更灵活的索引策略

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

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

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

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

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

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

...并使用新的功能:

…和…

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

查询分析

大多数Redis命令的时间复杂度都有很好的文档记录。作为一个例子,h随着O(n)的复杂性,“其中n是所要求的字段数。”使用RedIsearch,可以编写高级查询。但是,FT.Search和ft.aggregate命令的复杂性取决于查询的复杂性。

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

那么在我们正在做出模糊搜索时,我们会在重新搜索中发生什么?

让我们来看一个例子:

我们已准备好介绍我们的查询。让我们运行分析并分解分析结果。

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

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

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

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

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

最后,你有没有想过建立搜索结果是什么意思?我们需要计算每个文档的全文分数,按得分排序,最后加载字段。使用此信息,您可以识别瓶颈,使查询更快,提高服务器的性能。

如何开始

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

使用预览的Docker映像

为了开始你可以拉以下码头工人形象使用:预览标记:

Docker Run -P 6379:6379 Redis / Redismod:预览

或者,您可以从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
。网 NRedisJSON NRediSearch
Python redisjson-py redisearch-py

加入社区

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

Baidu