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刷题网站一定不能错过! |