当前位置: 首页 > news >正文

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改

前言

并发控制,一般有两种方案,悲观锁和乐观锁,其中悲观锁是默认每次更新操作肯定会冲突,所以每次操作都要先获取锁,操作完毕再释放锁,适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突,所以在更新前和更新后都不需要获取锁和释放锁的操作,所以效率更高,适合于读多写少的场景中。

在es中采用的是乐观锁机制,这也很好理解,因为es的定位是一个搜索引擎,所以一般是应用于读多写少的场景中。

es的乐观锁机制

1. 每次更新文档的version都会+1(这种方式已废弃)
2. 内部版本号控制,通过if_seq_no+if_primary_term
3. 外部版本号控制,version+verion_type=exeternal,其中verison由外部数据源指定,如数据从MySQL同步

查询的时候展示:
在这里插入图片描述
更新后:
在这里插入图片描述

修改固定值报错:
在这里插入图片描述

代码

 User user = new User();user.setAge(27);user.setName("赵六7");user.setInfo("测试人员查询");user.setSex("男");GetResponse<User> getResponse = elasticsearchClient.get(e -> e.index("user_test").id("3"), User.class);Long version = getResponse.version();Long seqNo = getResponse.seqNo();Long primaryTerm = getResponse.primaryTerm();System.out.println("更新前的version"+version+"更新前的seqNo"+seqNo+"更新前的primayTerm"+primaryTerm);// 修改带着版本号UpdateResponse<User> updateResponse = elasticsearchClient.update(e -> e.index("user_test").id("3").doc(user).ifSeqNo(seqNo).ifPrimaryTerm(primaryTerm), User.class);GetResponse<User> getResponse2 = elasticsearchClient.get(e -> e.index("user_test").id("3"), User.class);Long version2 = getResponse2.version();Long seqNo2 = getResponse2.seqNo();Long primaryTerm2 = getResponse2.primaryTerm();System.out.println("更新后的version"+version2+"更新后的seqNo"+seqNo2+"更新后的primayTerm"+primaryTerm2);
http://www.lryc.cn/news/322980.html

相关文章:

  • Docker 安装 Skywalking以及UI界面
  • mysql 空间查询 多边形内的点
  • 实际开发中,git版本切换操作
  • 线程池实现“线程复用”的原理
  • [Linux开发工具]——make/Makefile的使用
  • C++中的动态数组vector的基本操作
  • vsc ctrl+. 无效的问题
  • 科大讯飞开放平台-python语音转文字教程
  • 【LeetCode: 433. 最小基因变化 + BFS】
  • Python 安装目录及虚拟环境详解
  • linux sh脚本编写
  • 代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法
  • 【复杂网络建模】——建模工具Matlab入门
  • JVM面试篇
  • openEuler 22.03(华为欧拉)一键安装 Oracle 19C RAC(19.22) 数据库
  • 蓝桥杯刷题记录之数字王国之军训排队
  • Go语言学习Day1:什么是Go?
  • C语言内存函数之 memcmp函数
  • 3. C++ 常见的段错误及对策
  • 推荐的Kubernetes 学习资料
  • MySQL之索引与事务
  • Linux的基本使用
  • 亚信安慧AntDB全景观察:数据库领域的创新者
  • Linux 系统是如何收发⽹络包的
  • 飞跃前端瓶颈:技术进阶指南精华篇
  • Jenkins安装 Linux 更换镜像 安装插件
  • (一)基于IDEA的JAVA基础1
  • FPGA开源项目分享——基于FPGA加速的热扩散模拟器
  • 【ARM 嵌入式 C 入门及渐进 12 --寄存器位清0和置位函数实现】
  • Java实现10万,并发去重,优雅地处理重复请求!