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);
相关文章:

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改
前言 并发控制,一般有两种方案,悲观锁和乐观锁,其中悲观锁是默认每次更新操作肯定会冲突,所以每次操作都要先获取锁,操作完毕再释放锁,适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突&#…...

Docker 安装 Skywalking以及UI界面
关于Skywalking 在现代分布式系统架构中,应用性能监控(Application Performance Monitoring, APM)扮演着至关重要的角色。本文将聚焦于一款备受瞩目的开源APM工具——Apache Skywalking,通过对其功能特性和工作原理的详细介绍&am…...

mysql 空间查询 多边形内的点
数据库查询 # 1新增空间point类型坐标字段 ALTER TABLE gaoxin_isdp.business_master ADD COLUMN location2 point NULL AFTER location;# 2从原字段更新点位字段,原字段poi1是字符串106.474596,29.464360 UPDATE business_master SET location POINT(substr(poi…...
实际开发中,git版本切换操作
业务场景 客户环境需要部署当前分支的之前的一个版本代码,所以需要从当前的commit切换到之前的commit 版本切换步骤 查看版本提交日志 $ git reflog切换版本 git reset --hard 七位数的版本id在切换后的版本上更改代码后 执行完暂存 git commit 把回退后的代码提…...

线程池实现“线程复用”的原理
线程池实现“线程复用”的原理 学习线程复用的原理,以及对线程池的 execute 这个非常重要的方法进行源码解析。 线程复用原理 我们知道线程池会使用固定数量或可变数量的线程来执行任务,但无论是固定数量或可变数量的线程,其线程数量都远远…...

[Linux开发工具]——make/Makefile的使用
Linux项目自动化构建工具——make/Makefile 前言:一、背景二、认识make和makefile2.1 创建Makefile文件2.2 创建test.c文件,并打开Makefile2.3 我们想要test.c生成test文件2.4 编译2.5 清理可执行文件 三、理解依赖关系和依赖方法3.1 依赖关系3.2 依赖方…...
C++中的动态数组vector的基本操作
文章目录 前言一、vector数组的声明二、vector数组的初始化三、vector数组的大小1. 在声明时设置大小2. 修改大小3. 查看大小 四、添加元素与删除元素1. 添加元素2. 删除元素 总结 前言 在 C 中,std::vector 是一个标准库中的容器类型。它是一个动态数组࿰…...

vsc ctrl+. 无效的问题
描述 ubuntu ibus 输入法 vsc ctrl.快捷键无效 输出 _e 解决方案: 运行 ibus-setup 把表情符号这里的快捷键改了...
科大讯飞开放平台-python语音转文字教程
文章目录 简介实际使用代码coding简介 科大讯飞的语音转写(Long Form ASR)——基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。 转写的是已录制音频(非实时),音频文件上传成功后进入等待队列,待转写成功后用户…...

【LeetCode: 433. 最小基因变化 + BFS】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

Python 安装目录及虚拟环境详解
Python 安装目录 原文链接:https://blog.csdn.net/xhyue_0209/article/details/106661191 Python 虚拟环境 python 虚拟环境图解 python 虚拟环境配置与详情 原文链接:https://www.cnblogs.com/hhaostudy/p/17321646.html...

linux sh脚本编写
linux中bash Shell 是 Linux 的核心部分,它允许你使用各种诸如 cd、ls、cat 等的命令与 Linux 内核进行交互。Bash脚本和Shell脚本实际上是指同一种类型的脚本,只不过Bash是其中最常用的一种Shell。除了Bash之外,常见的Shell解释器还有C She…...
代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法
文章目录 卡码网.右旋字符串28. 实现 strStr()KMP算法(理论)KMP算法(代码)C代码 459.重复的子字符串暴力解法移动匹配KMP解法 卡码网.右旋字符串 卡码网题目链接 略 28. 实现 strStr() 力扣题目链接 文字链接:28. 实现 strStr() 视频链接:帮你把KMP算法…...

【复杂网络建模】——建模工具Matlab入门
目录 一、认识MATLAB 二、认识工具箱 三、基本操作和函数 3.1 算术操作符 3.2 数学函数 3.3 矩阵操作 3.4 索引和切片 3.5 逻辑操作 3.6 控制流程 3.7 数据输入输出 四、变量和数据类型 4.1 数值类型 4.2 整型 4.3 复数 4.4 字符串 4.5 逻辑类型 4.6 结构体&a…...

JVM面试篇
面试篇就是复习前面学的 什么是JVM 1.定义:JVM指的是Java虚拟机,本质是一个运行在计算机上的程序 2.作用:为了支持Java中Write Once ,Run Anywhere 编写一次 到处运行的跨平台特性 功能: 1.解释和运行 2.内存管理…...

openEuler 22.03(华为欧拉)一键安装 Oracle 19C RAC(19.22) 数据库
前言 Oracle 一键安装脚本,演示 openEuler 22.03 一键安装 Oracle 19C RAC 过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:Shell脚本安装Oracle数据库…...
蓝桥杯刷题记录之数字王国之军训排队
记录 卡了半天,check函数中的temp % ele 0写成了ele % temp 0就挺无语的 思路 这个晚上在补 代码 import java.util.*; public class Main{static List<List<Integer>> que new ArrayList<>();static int MIN Integer.MAX_VALUE;static i…...

Go语言学习Day1:什么是Go?
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…...

C语言内存函数之 memcmp函数
memcmp函数的记忆:mem表示内存,单位是字节,表示以单位字节来进行操作;头文件是string.h,cmp是compare的缩写,表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…...
3. C++ 常见的段错误及对策
常见的 C/C 段错误及对策 一、指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。 结构体成员指针未初始化;没有为结构体指针分配足够的内存;函数的…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...