reresearch2.0让您构建具有交互式搜索体验的现代应用程序
了解更多
简单地说,我们现在是Redis
到目前为止,RedisJSON和reresearch是云计算中最受欢迎的Redis模块。(见图1)RedisJSON和RediSearch(与Redis绑定)被拉出2000次以上每一天。这就是为什么我们认为Redis的技术传教士Itamar Haber在4年前编写第一版时是一个有远见的人。4月份,我们做了几个公告在RedisConf与JSON、索引和全文搜索功能相关。今天,我们很高兴地宣布这些功能的私人预览。
在这篇博客中,我们将概述当前的RedisJSON功能。之后,我们将深入这个私有预览的新功能部分。使用reresearch在JSON文档上建立索引、查询和使用全文搜索的能力是这个版本最酷的新特性。最后,我们将向您展示如何快速入门。
当你没有RedisJSON时,你可以通过使用String数据结构在Redis中建模嵌套文档。
但是,如果我们需要更新文档的一个子部分呢?
为了保持操作的原子性,我们需要:
如果在此过程中另一个客户端更新了文档,我们可能需要重试所有这些步骤。
然而,有了RedisJSON,我们可以完成这个更新使用单个原子事务:
让我们看另一个例子,在这个例子中,您有一个大JSON,但在应用程序中只需要该文档的一个子部分。
没有RedisJSON:
你必须:
使用RedisJSON,您可以只用一个命令检索您需要的数据,从而最小化CPU周期、网络开销,最重要的是,延迟。
如您所见,RedisJSON简化了JSON文档操作。RedisJSON的当前GA版本(v1.0)是社区已经广泛使用的版本,它解决了用String数据结构建模嵌套结构的缺点。下面是它的一些关键功能的概述。
在Redis中存储(或更新)一个与key相关的JSON文档
替换子部件(如。键的字符串值)
向集合或映射添加项
提取整个文档
使用JSONPath的子集提取它的一部分
我们在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之间。
下面是RUST重写的好处。这个新版本包含了对JSONPath的全面支持。现在可以使用JSONPath表达式的所有表达性。
给定一个JSON文档
通配符(以前仅限于第一项)
提取物片
一个更高级的过滤器表达式示例
active - active是Redis Enterprise提供的功能。万博体育彩Active-Active允许您将数据库复制到多个地理分布的Redis Enterprise集群中。万博体育彩用户可以使用本地读写延迟连接到最近的集群。
实现基于无冲突复制数据类型(CRDT)技术。虽然Redis支持的大多数核心数据结构都实现了它,但Redis开发了强大的知识和经验,为JSON做的新实现证实了这一点。
应用程序开发人员现在可以ag万博下载万博最新版本下载苹果依靠它来使用JSON文档构建地理分布的应用程序。下面是一个带有两个集群的active-active环境中的一系列操作示例:
让我们看看每个操作的细节:
当这个功能出现在公共预览版时,我们将详细说明所有同步流程,但如果您对这个功能感兴趣,请立即访问support@www.szfbf.com与我们联系。
本博客还宣布了RediSearch 2.2的私人预览版(作为Redis企业用户选择组的私人预览版,并作为我们社区的发布候选版)。万博体育彩
在本节中,我们将描述reresearchch新版本提供的新特性。但首先,我们将同时发布这两个流行模块的原因如下:
这个特别的新功能将把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文档:
聚合是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万博下载你可以从这里开始。
为了开始你可以拉以下码头工人形象使用: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),或于年月日与我们联络不和.