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

今天给大家带来RediSearch+RedisJSON作为搜索引擎的使用实践,希望对大家有所帮助!

RedisMod简介

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

  • RediSearch:一个功能齐全的搜索引擎;

  • RedisJSON:对JSON类型的原生支持;

  • RedisTimeSeries:时序数据库支持;

  • RedisGraph:图数据库支持;

  • RedisBloom:概率性数据的原生支持;

  • RedisGears:可编程的数据处理;

  • RedisAI:机器学习的实时模型管理和部署。

安装

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

  • 使用如下命令下载RedisMod的镜像;

docker pull redislabs/redismod:preview
  • 在容器中运行RedisMod服务。

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的根节点中添加数据;

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数据支持格式化高亮显示;

  • 接下来可以通过JSON.GET命令获取JSON类型键值对的值;

JSON.GET product:1

  • 也可以只获取值的指定属性,在RedisJSON中,获取JSON对象中的属性时需要以.开头;

JSON.GET product:1 .name .subTitle

  • 还可以通过JSON.TYPE命令来获取JSON对象类型。

JSON.TYPE product:1 .

RediSearch

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

  • 使用RediSearch来搜索数据之前,我们得先创建下索引,建立索引的语法有点复杂,我们先来看下;

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:指定属性可以进行排序。

  • 看了语法可能不太好理解,直接对之前的商品数据建立索引试试就懂了;

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对数据进行查看了,比如使用*可以查询全部;

FT.SEARCH productIdx *

  • 由于我们设置了price字段为SORTABLE,我们可以以price降序返回商品信息;

FT.SEARCH productIdx * SORTBY price DESC

  • 还可以指定返回的字段;

FT.SEARCH productIdx * RETURN 3 name subTitle price

  • 我们把brandName设置为了TAG类型,我们可以使用如下语句查询品牌为小米或苹果的商品;

FT.SEARCH productIdx '@brandName:{小米 | 苹果}'

  • 由于price是NUMERIC类型,我们可以使用如下语句查询价格在500~1000的商品;

FT.SEARCH productIdx '@price:[500 1000]'

  • 还可以通过前缀进行模糊查询,类似于SQL中的LIKE,使用*表示;

FT.SEARCH productIdx '@name:小米*'

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

FT.SEARCH productIdx '黑色'

  • 当然我们也可以指定搜索的字段,比如搜索副标题中带有红色字段的商品;

FT.SEARCH productIdx '@subTitle:红色'

  • 通过FT.DROPINDEX命令可以删除索引,如果加入DD选项的话,会连数据一起删除;

FT.DROPINDEX productIdx
  • 通过FT.INFO命令可以查看索引状态;

FT.INFO productIdx

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

对比Elasticsearch Redis官方曾公布了RediSearch与Elasticsearch的性能对比测试,大家可以看下。 索引能力 对Wikipedia的560万(5.3GB)文档进行索引,RediSearch耗时221s,Elasticsearch耗时349s,RediSearch快了58%!

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

​总结

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

比 Elasticsearch 更快 RediSearch + RedisJSON = 王炸相关推荐

  1. 比 Elasticsearch 更快RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  2. 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

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

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  4. 比 Elasticsearch 更快,RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  5. 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸~

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  6. 快如闪电的开源搜索引擎:Typesense ,比Elasticsearch更快更易用

    一个快如闪电的开源搜索引擎,就如同Redis使用内存存储数据一样(这在Redis出现之前是不敢想象的,几乎没有人把全部的mysql数据存储到内存中),搜索引擎也是,之前各家做法都是尽量存磁盘,需要的时 ...

  7. Elasticsearch:使用新的 wildcard 字段更快地在字符串中查找字符串 - 7.9 新功能

    在 Elasticsearch 7.9 中,我们将引入一种新的 "wildcard" 字段类型,该字段类型经过优化,可在字符串值中快速查找模式.这种新的字段类型采用了一种全新的方式 ...

  8. HPE品牌存储为啥高调? 因为“王炸”多啊!

    作为紫光华山的两个品牌,HPE.H3C推广有条不紊的进行着.不久前全新H3C品牌存储产品亮相,而同样HPE品牌存储产品更是新品不断.这么看来给存储业界的感觉就是,看似平静的存储市场,好像有一只庞然大物 ...

  9. 共享单车哈罗王炸连出,OFO小心沦为炮灰

    在共享单车行业寒冬之际,哈罗单车却是好消息不断,先是12月4日宣布获得3.5亿美元的D1轮融资,昨天又再次宣布完成10亿元的D2轮融资,在这大家都勒紧裤腰带过日子的寒冬里,哈罗单车可谓是王炸连出,来了 ...

最新文章

  1. Echart的angularjs封装
  2. sql isnull怎么没用_SQL语言在数据工程(Data Engineering)中的运用(一)
  3. Mac安装brew及报错处理办法
  4. leetcode89 (2022.1.8)
  5. GitHub 下架 Youtube-dl 遭粉丝疯狂上传源码报复,开源者的权益谁来维护?
  6. LeetCode 29. Divide Two Integers
  7. ElasticSearch 状态查询Cat接口
  8. IMA-ADPCM 算法
  9. Consul:网络坐标
  10. 什么是网络分析仪?它的重要技术指标有哪些?
  11. Linux chrome/firefox flash过期问题解决办法
  12. AngularJS初识
  13. android 稳定的定时器,Multi Timer「多工计时器」v2.8.2 for Android 特别高级版
  14. B站付费视频使up主掉粉过万
  15. BIOS/UEFI基础——Protocol介绍
  16. 我对嵌入式软件的理解
  17. Varint+ZigZag编码和解码
  18. 【Linux】GCC程序开发工具(下)
  19. mysql 判断时间是否当天_MySQL 获取当天日期
  20. ftp服务器文件能预览吗,ftp服务器 文件预览

热门文章

  1. C/C++:计算N的N次方的个位数(巧用快速幂与模运算性质)
  2. 计算机专业分类分级,计算机等级分级
  3. 简易时间计时器的实现
  4. 龚本灿c语言程序设计,c语言程序设计初步-求索学堂.ppt
  5. Java实现计数排序
  6. mysql数据库启动_MySQL数据库之Mysql启动的方式(四种)
  7. 关于2进制与十六进制的转换;C语言
  8. LaTeX的正负号写法
  9. 装X神器,让你的grafana看板变得炫酷起来
  10. python用什么软件编程-初学 Python 需要安装哪些软件?