比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!

这篇具有很好参考价值的文章主要介绍了比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!

Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用。最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch可以作为搜索引擎使用,并且支持中文搜索!今天给大家带来RediSearch+RedisJSON作为搜索引擎的使用实践,希望对大家有所帮助!

SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/…

RedisMod简介

首先介绍下RedisMod这个东西,它是一系列Redis的增强模块。有了RedisMod的支持,Redis的功能将变得非常强大。目前RedisMod中包含了如下增强模块:

  • RediSearch:一个功能齐全的搜索引擎;
  • RedisJSON:对JSON类型的原生支持;
  • RedisTimeSeries:时序数据库支持;
  • RedisGraph:图数据库支持;
  • RedisBloom:概率性数据的原生支持;
  • RedisGears:可编程的数据处理;
  • RedisAI:机器学习的实时模型管理和部署。

安装

首先我们需要安装带所有RedisMod的Redis,使用Docker来安装非常方便的!

  • 使用如下命令下载RedisMod的镜像;
bash
复制代码docker pull redislabs/redismod:preview
  • 在容器中运行RedisMod服务。
bash复制代码docker run -p 6379:6379 --name redismod \
-v /mydata/redismod/data:/data \
-d redislabs/redismod:preview

RedisJSON

有了RedisJSON模块,Redis就可以存储原生JSON类型数据了,通过它你可以很方便地访问JSON中的各个属性,类似在MongoDB中那样,下面我们就来体验下,这里我们将使用RedisInsight 来操作Redis。

  • 首先通过JSON.SET命令向Redis中添加JSON类型键值对,几个商品对象数据,由于JSON是树形结构的,使用$符号代表往JSON的根节点中添加数据;
bash复制代码JSON.SET product:1 $ '{"id":1,"productSn":"7437788","name":"小米8","subTitle":"全面屏游戏智能手机 6GB+64GB 黑色 全网通4G 双卡双待","brandName":"小米","price":2699,"count":1}'
JSON.SET product:2 $ '{"id":2,"productSn":"7437789","name":"红米5A","subTitle":"全网通版 3GB+32GB 香槟金 移动联通电信4G手机 双卡双待","brandName":"小米","price":649,"count":5}'
JSON.SET product:3 $ '{"id":3,"productSn":"7437799","name":"Apple iPhone 8 Plus","subTitle":"64GB 红色特别版 移动联通电信4G手机","brandName":"苹果","price":5499,"count":10}'
  • 数据插入成功后,在RedisInsight中将看到如下信息,JSON数据支持格式化高亮显示;

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 接下来可以通过JSON.GET命令获取JSON类型键值对的值;
bash
复制代码JSON.GET product:1

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 也可以只获取值的指定属性,在RedisJSON中,获取JSON对象中的属性时需要以.开头;
bash
复制代码JSON.GET product:1 .name .subTitle

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 还可以通过JSON.TYPE命令来获取JSON对象类型。
bash
复制代码JSON.TYPE product:1 .

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

RediSearch

通过RediSearch模块,Redis可以变成一个功能强大的全文搜索引擎,并且原生支持中文搜索,下面我们就来体验下!

  • 使用RediSearch来搜索数据之前,我们得先创建下索引,建立索引的语法有点复杂,我们先来看下;
bash复制代码FT.CREATE {index}
  [ON {data_type}]
     [PREFIX {count} {prefix} [{prefix} ..]
     [LANGUAGE {default_lang}]
  SCHEMA {identifier} [AS {attribute}]
      [TEXT | NUMERIC | GEO | TAG ] [CASESENSITIVE]
      [SORTABLE] [NOINDEX]] ...
  • 使用FT.CREATE命令可以建立索引,语法中的参数意义如下;
    • index:索引名称;
    • data_type:建立索引的数据类型,目前支持JSON或者HASH两种;
    • PREFIX:通过它可以选择需要建立索引的数据前缀,比如PREFIX 1 "product:"表示为键中以product:为前缀的数据建立索引;
    • LANGUAGE:指定TEXT类型属性的默认语言,使用chinese可以设置为中文;
    • identifier:指定属性名称;
    • attribute:指定属性别名;
    • TEXT | NUMERIC | GEO | TAG:这些都是属性可选的类型;
    • SORTABLE:指定属性可以进行排序。
  • 看了语法可能不太好理解,直接对之前的商品数据建立索引试试就懂了;
bash
复制代码FT.CREATE productIdx ON JSON PREFIX 1 "product:" LANGUAGE chinese SCHEMA $.id AS id NUMERIC $.name AS name TEXT $.subTitle AS subTitle TEXT $.price AS price NUMERIC SORTABLE $.brandName AS brandName TAG
  • 建立完索引后,我们就可以使用FT.SEARCH对数据进行查看了,比如使用*可以查询全部;
bash
复制代码FT.SEARCH productIdx *

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 由于我们设置了price字段为SORTABLE,我们可以以price降序返回商品信息;
bash
复制代码FT.SEARCH productIdx * SORTBY price DESC

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 还可以指定返回的字段;
bash
复制代码FT.SEARCH productIdx * RETURN 3 name subTitle price

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 我们把brandName设置为了TAG类型,我们可以使用如下语句查询品牌为小米苹果的商品;
bash
复制代码FT.SEARCH productIdx '@brandName:{小米 | 苹果}'

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 由于priceNUMERIC类型,我们可以使用如下语句查询价格在500~1000的商品;
bash
复制代码FT.SEARCH productIdx '@price:[500 1000]'

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 还可以通过前缀进行模糊查询,类似于SQL中的LIKE,使用*表示;
bash
复制代码FT.SEARCH productIdx '@name:小米*'

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • FT.SEARCH中直接指定搜索关键词,可以对所有TEXT类型的属性进行全局搜索,支持中文搜索,比如我们搜索下包含黑色字段的商品;
bash
复制代码FT.SEARCH productIdx '黑色'

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 当然我们也可以指定搜索的字段,比如搜索副标题中带有红色字段的商品;
bash
复制代码FT.SEARCH productIdx '@subTitle:红色'

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • 通过FT.DROPINDEX命令可以删除索引,如果加入DD选项的话,会连数据一起删除;
bash
复制代码FT.DROPINDEX productIdx
  • 通过FT.INFO命令可以查看索引状态;
bash
复制代码FT.INFO productIdx

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

  • RediSearch的搜索语法比较复杂,不过我们可以对比SQL来使用它,具体可以参考下表。

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

对比Elasticsearch

Redis官方曾公布了RediSearch与Elasticsearch的性能对比测试,大家可以看下。

索引能力

对Wikipedia的560万(5.3GB)文档进行索引,RediSearch耗时221s,Elasticsearch耗时349s,RediSearch快了58%

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

查询能力

数据建立索引后,使用32个客户端对两个单词进行检索,RediSearch的吞吐量达到12.5K ops/sec,Elasticsearch的吞吐量为3.1K ops/sec,RediSearch比Elasticsearch要快4倍。同时RediSearch的延迟为8ms,而Elasticsearch为10ms,RediSearch延迟稍微低些!

比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!,elasticsearch,大数据,搜索引擎

总结

经过这么多年的发展,Redis的功能也越来越强大了,它已经不仅仅是个缓存工具了,更像是一个数据库了。RediSearch给了我们实现搜索功能的另一个选择,性能也非常不错,大家如果做搜索相关功能的话可以考虑下它!

如果你想了解更多Redis实战技巧的话,可以试试这个带全套教程的实战项目(50K+Star):github.com/macrozheng/…文章来源地址https://www.toymoban.com/news/detail-837103.html

参考资料

  • 官方文档:developer.redis.com/howtos/redi…
  • 参考手册:oss.redis.com/redisearch/
  • 性能测试:redis.com/blog/search…

到了这里,关于比 Elasticsearch 更快! RediSearch + RedisJSON = 王炸!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Elasticsearch】Elasticsearch官方测试数据

    原先的地址(已经失效了) :https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json?raw=true 备用地址 : https://github.com/elastic/elasticsearch/edit/7.5/docs/src/test/resources/accounts.json 下面是数据: {“index”:{“_id”:“1”}} {“account_number”:1,“balance”:39225,“firstname”:“

    2024年02月03日
    浏览(39)
  • Elasticsearch:将数据从 Snowflake 摄取到 Elasticsearch

    作者:来自 Elastic Ashish Tiwari 为了利用 Elasticsearch® 提供的强大搜索功能,许多企业在 Elasticsearch 中保留可搜索数据的副本。 Elasticsearch 是一种经过验证的技术,适用于传统文本搜索以及用于语义搜索用例的向量搜索。 Elasticsearch Relevance EngineTM (ESRE) 使你能够在专有数据上添加

    2024年01月18日
    浏览(36)
  • Elasticsearch写入数据之elasticsearch-java

    在《Elasticsearch8.4.2在windows系统下的安装介绍》中介绍了如何安装ES,那么安装成功后改如何将数据写入到ES呢?写入ES数据的方式有很多,本次将介绍一种写入方式elasticsearch-java来写入数据到ES,elasticsearch-java是官方提供的java sdk写入方式,用户只需要配置相关参数就可以方便

    2024年02月11日
    浏览(37)
  • Elasticsearch:如何从 Elasticsearch 集群中删除数据节点

    Elasticsearch 集群通常包含多个节点,并且可能存在需要从集群中删除节点的情况。 应谨慎执行此过程,以确保数据的完整性和可用性。 在本文中,我们将引导你完成从 Elasticsearch 集群安全删除节点的步骤。 在尝试从 Elasticsearch 集群中删除节点之前,确保集群处于健康状态(

    2024年02月07日
    浏览(39)
  • Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

    在我之前的文章: Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标 Elasticsearch:enrich processor (7.5发行版新功能) 我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里,我们来更加详细地使用一个具体的例子来进行展示。更多官方文档描述,我们可

    2024年02月15日
    浏览(35)
  • Elasticsearch:如何在 Elasticsearch 中存储复杂的关系数据

    在传统的数据库中,对数据关系的描述无外乎三种:一对一、一对多和多对多关系。 如果有关系相关的数据,我们一般在建表的时候加上主外键。 建立数据链接,然后在查询或者统计中通过 join 恢复或者补全数据,最后得到我们需要的结果数据,然后转换到 Elasticsearch中,如

    2024年02月05日
    浏览(74)
  • Elasticsearch中的数据完全备份至另外的Elasticsearch

    有两种方式实现: 1、快照和还原 2、导出和导入 1、在源Elasticsearch集群上创建快照存储库 2、创建快照 3、在还原库上创建同样的快照存储库 4、从快照还原 1、导出索引数据 2、导入数据

    2024年02月11日
    浏览(30)
  • Elasticsearch 对比传统数据库:深入挖掘 Elasticsearch 的优势

    当你为项目选择数据库或搜索引擎时,了解每个选项的细微差别至关重要。 今天,我们将深入探讨 Elasticsearch 的优势,并探讨它与传统 SQL 和 NoSQL 数据库的比较。 Elasticsearch 以强大的 Apache Lucene 库为基础,是一个分布式搜索和分析引擎。 它以其速度、可扩展性以及快速索引

    2024年02月10日
    浏览(36)
  • 【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

    目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理

    2024年02月05日
    浏览(32)
  • Spring Data Elasticsearch - 在Spring应用中操作Elasticsearch数据库

    Spring Data Elasticsearch为文档的存储,查询,排序和统计提供了一个高度抽象的模板。使用Spring Data ElasticSearch来操作Elasticsearch,可以较大程度的减少我们的代码量,提高我们的开发效率。 要使用Elasticsearch我们需要引入如下依赖: 还需要在配置文件中增加如下配置 类比于MyBat

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包