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同步

查询的时候展示:

更新后:

修改固定值报错:

代码

java 复制代码
 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);
相关推荐
曹牧1 小时前
C#:空合并运算符
java·前端·数据库
happylifetree2 小时前
Python67:核心语法-函数进阶-参数类型(函数作为参数)
python
布吉岛的石头2 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记2 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
小羊没烦恼!2 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
紧跟先前的步伐2 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵2 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨3 小时前
spring auth 核心流程详解
java·后端·spring
quantdash_cc3 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
镜子AI3 小时前
镜子AI工程实践:用 Python 做 GEO 实体一致性审计,并自动生成 JSON-LD 结构化数据
人工智能·python·json