![]() mall学习教程官网:macrozheng.com 之前就了解过 RediSearch 这个项目,并在项目中使用过。 就我的使用体验来说,简单场景下,用来平替 Elasticsearch 的使用场景已经足够。像是 Elasticsearch 中常用中文分词插件可以用 RediSearch 替代,但是拼音转中文插件在 RediSearch 中还没有功能替代,只能通过个人手段处理。 RediSearch 对于我来说相比 Elasticsearch 的最大优点就是 内存占用非常低,查询性能也足够高😂。 在我的低配 2 核 4g 内存的服务器上,通过官方提供的 Redis Stack 镜像部署 Redis 以及自带模块 RediSearch 后,内存占用才不到 100m。 相比部署一个 Elasticsearch 起码需要 1g 内存来说,我更愿意部署 RediSearch。本文大纲如下, ![]() RediSearch 简介RediSearch 是一个 Redis 模块,为 Redis 提供查询、二级索引和全文搜索功能。 要使用 RediSearch 的功能,我们需要要先声明一个 index(类似于 Elasticsearch 的索引)。然后就可以使用 RediSearch 的查询语言来查询该索引下的数据。 RediSearch 内部使用压缩的倒排索引,所以可以用较低的内存占用来实现索引的快速构建。 目前 RediSearch 最新版支持的查询功能也比较丰富了,除了基本的文本分词还支持聚合统计、停用词、同义词、拼写检查、结果排序、标签查询、向量相似度查询以及中文分词等。
对比 Elasticsearch基本硬件![]() 数据源![]() RediSearch 配置![]() Elasticsearch 配置![]() 版本![]() 索引构建测试在官方提供的索引构建测试中,RediSearch 用 221 秒的速度超过了 Elasticsearch 的 349 秒,领先 58%, ![]() 查询性能测试通过数据集导入索引数据后,官方使用运行在专用负载生成器服务器上的 32 个客户端启动了两个词的搜索查询。 如下图所示,RediSearch 的吞吐量达到了 12.5K ops/sec,而 Elasticsearch 的吞吐量只有了 3.1K ops/sec,快了 4 倍。此外 RediSearch 的延迟稍好一些,平均为 8 毫秒,而 Elasticsearch 为 10 毫秒。(ops/sec 每秒操作数) ![]() 由此可见,RediSearch 在性能上对比 RediSearch 有比较大的优势。 目前 RediSearch 已经更新到 2.0+ 版本,根据官方对于 RediSearch 2.0 版本介绍,与 RediSearch 1.6 相比,吞吐量和延迟相关的指标都提高了 2.4 倍。 RediSearch 安装对于目前最新的 RediSearch 2.0 版本来说,官方推荐直接使用 redis-stack-server 镜像进行进行部署,也比较简单, docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest 设置登录密码 // 设置登录密码 通过 redis-cli 连接查看 RediSearch 是否安装了 search 模块, redis-cli -h localhost 索引操作FT.CREATE 创建索引命令> FT.CREATE idx:goods on hash prefix 1 "goods:" language chinese schema goodsName text sortable
添加索引时,直接使用 hset 命令添加一个 key 前缀是 "goods:" 的源数据。如下, hset goods:1001 goodsName 小米手机 FT.SEARCH 查询索引> FT.SEARCH idx:goods1 "手机" FT.INFO 查询指定名称索引信息> FT.INFO idx:goods
FT.DROPINDEX 删除索引名称> FT.DROPINDEX idx:goods1
如果需要删除索引数据,直接使用 del 命令删除索引关联的源数据即可。 Java 使用 RediSearch对于 Java 项目直接选用 Jedis4.0 以上版本就可以使用 RediSearch 提供的搜索功能,Jedis 在 4.0 以上版本自动支持 RediSearch,编写 Jedis 连接 RedisSearch 测试用例,用 RedisSearch 命令创建如下, Jedis 创建 RediSearch 客户端@Bean Jedis 创建索引Schema schema = new Schema() Jedis 添加索引源数据public boolean addGoodsIndex(String keyPrefix, Goods goods) { Jedis 中文查询public SearchResult search(String goodsIdxName, SearchObjVO searchObjVO, Page<SearchPageGoodsVO> page) { 最后聊两句RediSearch 是这几年新出的一个全文搜索引擎,借助于 Redis 的成功,RediSearch 一出场就获得了较高的关注度。 目前来看,我个人使用 RediSearch 作为项目的全文搜索引擎已经够用了,它有易于安装、索引占用内存低、查询速度快等许多优点。不过在对 Redis 集群的支持上,RediSearch 目前只针对 Redis 企业版有解决方案,开源版还没有,这一点需要告诉大家。 如果想要在生产环境大规模使用,我还是不太建议的。 Github上 标星60K 的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期 ,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验 ,同时提高自己独立开发一个项目的能力 ,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。![]() 整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,具体大纲可以参考下图,你也可以点击链接 mall视频教程 了解更多内容。 ![]() 推荐阅读
上一篇:使用PHP和Xunsearch提升博客网站的标签搜索功能 下一篇:想提高编程技能?这几个PHP刷题网站一定不能错过! |