已解决 - Elasticsearch 操作更新数据后,没有立即生效问题
- 问题描述:
SpringBoot 项目使用 RestHighLevelClien 操作ES修改数据成功,之后前端调用查询接口发现数据并未更新,待1S左右再次刷新发现ES数据成功更新。
从现象来看是ES操作后存在延迟。 - 问题原因
这个问题是Elasticsearch本身在操作数据后有一定的延迟性导致。Elasticsearch默认情况下在写入数据后,是要等1s后才能被查询到。
因为Elasticsearch中每次索引refresh
会产生一个新的 lucene 段,这会导致频繁的segment merge
行为,对系统 CPU 和 IO 占用都比较高。 - 解决方案
- 方案1:代码中指定setRefreshPolicy的刷新策略,使用立即刷新策略IMMEDIATE方式提交请求。
1 public static enum RefreshPolicy implements Writeable {
2 NONE("false"), 3 IMMEDIATE("true"), 4 WAIT_UNTIL("wait_for"); 5 }- IMMEDIATE:
请求想ES提交了数据,立即刷新数据再结束请求
优点:实时性最高,实时性最高
缺点:消耗资源高 - WAIT_UNTIL
请求向ES提交数据,等待1S(默认)后结束请求,数据刷新。
优点:实时性相对较高
缺点:资源消耗低 - NONE(默认策略)
请求向ES提交数据,不等待数据完成刷新,直接结束请求。
优点:操作延时短,资源消耗低
缺点:实时性低 - 支持的接口:
删除:DeleteRequestBuilder
新增:IndexRequestBuilder
更新:UpdateRequestBuilder
批量:BulkRequestBuilder
- IMMEDIATE:
- 方案2:前端后后端,使用sleep的方式延迟调用API,等待ES数据更新后再进行请求
- 方案1:代码中指定setRefreshPolicy的刷新策略,使用立即刷新策略IMMEDIATE方式提交请求。
分类:
IT-技术分享 / 技术问题
标签:
ElasticSearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!