基于 Postman 和 Elasticsearch 测试乐观锁的操作流程
鱼说,你看不到我眼中的泪,因为我在水中。水说,我能感觉到你的泪,因为你在我心中。 -村上春树
在分布式系统中,多个并发操作对同一资源的修改可能导致数据不一致。为了解决这种问题,Elasticsearch 提供了乐观锁(Optimistic Locking)机制,通过控制文档的 _seq_no 和 _primary_term 来确保更新的原子性。本文将通过 Postman 对 Elasticsearch 进行一次乐观锁机制的测试,模拟多个并发请求对同一文档的操作场景。
1.环境配置
在本文的测试中,使用的 Elasticsearch 服务地址为:http://192.168.56.100:9200。
首先,我们通过 Postman 来测试乐观锁的应用场景。这里假设你已经安装并配置好了 Elasticsearch。
Step 1: 创建文档
通过 POST 请求在 Elasticsearch 中创建一个新的文档:
URL:http://192.168.56.100:9200/chhei/system/100
请求方式: POST
请求体:
{ "name": "chhei"
}
输出结果:
{"_index": "chhei","_type": "system","_id": "100","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 2,"_primary_term": 1
}

通过上面的请求,成功创建了一个名为 chhei 的文档,并分配了文档的 _seq_no 和 _primary_term,这是乐观锁机制中的关键部分。初始版本号为 1,_seq_no 为 2,_primary_term 为 1。
Step 2: 乐观请求 1 —— 更新文档
模拟一次乐观锁请求,通过控制 _seq_no 和 _primary_term 来进行文档更新:
URL: http://192.168.56.100:9200/chhei/system/100?if_seq_no=2&if_primary_term=1
请求方式: POST
请求体:
{"name": "chhei01"
}
查询文档: 接下来通过 GET 请求查看文档更新后的状态:
URL: http://192.168.56.100:9200/chhei/system/100
请求方式: GET
输出结果:
{"_index": "chhei","_type": "system","_id": "100","_version": 2,"_seq_no": 3,"_primary_term": 1,"found": true,"_source": {"name": "chhei01"}
}

可以看到,文档的 name 字段成功更新为了 chhei01,文档版本号增加到 2,_seq_no 变为 3,_primary_term 保持为 1。
Step 3: 乐观请求 2 —— 模拟版本冲突
尝试使用过期的 _seq_no 和 _primary_term 再次更新文档,模拟一次乐观锁冲突:
URL: http://192.168.56.100:9200/chhei/system/100?if_seq_no=2&if_primary_term=1
请求方式: POST
请求体:
{"name": "chhei02"
}
输出结果:
{"error": {"root_cause": [{"type": "version_conflict_engine_exception","reason": "[100]: version conflict, required seqNo [2], primary term [1]. current document has seqNo [3] and primary term [1]","index_uuid": "ChcNr4J8QzyOk1SuFzvzdQ","shard": "0","index": "chhei"}],"type": "version_conflict_engine_exception","reason": "[100]: version conflict, required seqNo [2], primary term [1]. current document has seqNo [3] and primary term [1]","index_uuid": "ChcNr4J8QzyOk1SuFzvzdQ","shard": "0","index": "chhei"},"status": 409
}

从返回的错误信息中可以看到,Elasticsearch 检测到当前文档的 _seq_no 已经变为 3,而请求中的 _seq_no 仍然是 2,因此产生了 409 Conflict 错误,提示版本冲突。
相关文章:
基于 Postman 和 Elasticsearch 测试乐观锁的操作流程
鱼说,你看不到我眼中的泪,因为我在水中。水说,我能感觉到你的泪,因为你在我心中。 -村上春树 在分布式系统中,多个并发操作对同一资源的修改可能导致数据不一致。为了解决这种问题,Elasticsearch 提供了乐观…...
如何从PPT中导出600dpi的高清图
Step1. 修改PPT注册表 具体过程,参见如下链接:修改ppt注册表,导出高分辨率图片 Step2. 打开PPT,找到自己想要保存的图,选中图像,查看图像尺寸并记录 Step3. 重新新建一个PPT,并根据记录的图片…...
day01-ElasticStack+Kibana
ElasticStack-数据库 #官网https://www.elastic.co/cn/ #下载7.17版环境准备 主机名IP系统版本VMware版本elk110.0.0.91Ubuntu 22.04.417.5.1elk210.0.0.92Ubuntu 22.04.417.5.1elk310.0.0.93Ubuntu 22.04.417.5.1 单机部署ES 1.下载ES软件包,放到/usr/local下 […...
HTML 约束验证
HTML5引入了表单相关的一些新机制:它为<input>元素和约束验证增加了一些新的语义类型,使得客户端检查表单内容变得容易。基本上,通过设置一些新的属性,常用的约束条件可以无需 JavaScript 代码而检测到;对于更复…...
vue3项目开发一些必备的内容,该安装安装,该创建创建
重新整理了一下项目开发必备的一些操作,以后直接复制黏贴运行,随着项目开发,后期会陆续补充常用插件或组件等 如果你是还没有安装过的新人,建议从《通过安装Element UI/Plus来学习vue之如何创建项目、搭建vue脚手架、npm下载、封装…...
2D拓扑图
2D拓扑图主要指的是在二维平面上表示物体形状和关系的一种图形表示方法。 一、基本概念 2D网格拓扑结构:在二维平面上,由一系列的节点(node)和边(edge)组成。每个节点代表一个具体的位置或坐标点…...
大数据面试题整理——Hive
系列文章目录 大数据面试题专栏点击进入 文章目录 系列文章目录Hive 面试知识点全面解析一、函数相关(一)函数分类与特点(二)concat和concat_ws的区别 二、SQL 的书写和执行顺序(一)书写顺序(二…...
Python实现图像(边缘)锐化:梯度锐化、Roberts 算子、Laplace算子、Sobel算子的详细方法
目录 Python实现图像(边缘)锐化:梯度锐化、Roberts算子、Laplace算子、Sobel算子的详细方法引言一、图像锐化的基本原理1.1 什么是图像锐化?1.2 边缘检测的基本概念 二、常用的图像锐化算法2.1 梯度锐化2.1.1 实现步骤 2.2 Robert…...
【电机控制】相电流重构——单电阻采样方案
【电机控制】相电流重构——单电阻采样方案 文章目录 [TOC](文章目录) 前言一、基于单电阻采样电流重构技术原理分析1.1 单电阻采样原理图1.2 基本电压矢量与电流采样关系 二、非观测区2.1 扇区过渡区2.2 低压调制区 三、非观测区补偿——移相法四、参考文献总结 前言 使用工具…...
#基础算法
1 差分练习 1 模板题 代码实现: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int num sc.nextInt();long[][] arr new long[n 2][m …...
如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?
在OA系统或者合同管理系统中,我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况,并且需要上级对下级的公文进行批注等操作,或者不同部门的人需要签字审核,这就需要用到文档流转功能,如何用猿大师办公助手实现…...
Python中的列表是什么?它们有什么用途?
1、Python中的列表是什么?它们有什么用途? 在Python中,列表是一种有序的集合,可以包含不同类型的元素。列表可以存储一组值,并且可以方便地访问、修改和操作这些值。 列表的主要用途包括: 数据存储&…...
探索现代软件开发中的持续集成与持续交付(CI/CD)实践
探索现代软件开发中的持续集成与持续交付(CI/CD)实践 随着软件开发的飞速进步,现代开发团队已经从传统的开发模式向更加自动化和灵活的开发流程转变。持续集成(CI) 与 持续交付(CD) 成为当下主…...
React 前端框架开发入门案例
以下是一个使用 React 进行前端框架开发的入门案例,实现一个简单的待办事项列表应用。 一、准备工作 安装 Node.js:React 需要 Node.js 环境来运行。你可以从 Node.js 官方网站下载并安装适合你操作系统的版本。 创建项目目录:在你的电脑上…...
模拟 DDoS 攻击与防御实验
模拟 DDoS 攻击与防御实验可以帮助理解攻击原理和防御策略。在进行这种实验时,必须确保在受控、合法的环境中进行,避免对真实网络造成损害。以下是具体步骤: 环境要求 硬件:至少两台计算机(或虚拟机)&…...
【electron8】electron实现“图片”的另存为
注:该列出的代码,都在文章内示例出 1. 另存为按钮事件: const saveAsHandler async () > {const { path, sessionId } recordInfoif(typeof message ! string) return;// 因为我的图片是加密的,所以我需要根据接口返回的路…...
Python分析假期对美国出生率的影响
背景 1、数据集下载 birthsHistorical US birth data culled from the CDC website - jakevdp/data-CDCbirthshttps://github.com/jakevdp/data-CDCbirths 2、数据集介绍 此数据来自美国疾病控制和预防中心,并通过 Google 的 BigQuery Web UI 使用以下查询进行编…...
机械臂笛卡尔空间轨迹规划
1. 重新优化末端轨迹规划 调整末端轨迹的插值方法或参数:如果之前使用的是线性插值,可改为三次样条插值。例如,对于一个在二维平面上从点(0, 0)到(10, 10)的末端轨迹,线性插值可能是简单地在每个时间步长均匀增加坐标值࿰…...
红队工具---Behinder学习
1.什么是Behinder? Behinder 是一款用于网络渗透测试的安全工具,主要用于对 Web 应用进行攻击和漏洞利用。它提供了强大的功能,是一款红队的大杀器,几乎是现代web安全必须学习的一款webshell管理工具。 主要用途 渗透测试&#…...
k8s 1.28.2 集群部署 NFS server 和 NFS Subdir External Provisioner
文章目录 [toc]前言部署 NFS server镜像准备节点打标签启动 NFS server创建 pv 验证创建 pvc创建 pod 挂载验证 部署 NFS Subdir External Provisioner创建 pod 验证提前创建 pvc 的方式使用 volumeClaimTemplates 的方式 前言 NFS Subdir External Provisioner 可以使用现有的…...
【操作系统】第三章 内存管理(一)
第三章 内存管理 3.1 内存管理概念 3.1.1 内存管理的基本原理和要求 内存管理的主要功能: 内存空间的分配与回收。[连续分配管理方式](#3.1.2 连续分配管理方式)和非连续分配管理方式(分页、分段)地址转换:实现逻辑地址到物理…...
基于主从博弈的主动配电网阻塞管理探索
基于主从博弈的主动配电网阻塞管理 首先,在日前市场中,LA(负荷聚合商)根据历史数据预测次日向上级电网购电的电价信息和预测分布式电源(燃气轮机)出力、风电场出力信息,同时考虑事前与用户签订协议的可中断负荷&#x…...
做了十几年财务,我用RPA把最累的工作交给了“机器人”
在财务这行摸爬滚打了十几年,算是一路看着这个行业慢慢“进化”过来的:从最早拿计算器对数据,到后来用电脑做账,从手工账本过渡到ERP系统,再到这两年铺天盖地的“数智化转型”。中间也确实尝试过不少所谓的“黑科技”。…...
Multisim仿真-FSK调制系统设计与性能优化
1. FSK调制系统基础与Multisim入门 FSK(频移键控)是数字通信中最基础的调制方式之一,它通过不同频率的载波来表示二进制数据。在实际工程中,Multisim作为电子电路仿真利器,能帮我们快速验证设计思路。我刚开始接触通信…...
Windows Defender移除工具终极指南:如何彻底禁用Windows Defender提升系统性能
Windows Defender移除工具终极指南:如何彻底禁用Windows Defender提升系统性能 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://git…...
Medusa小程序:微信、支付宝等小程序平台对接的完整指南
Medusa小程序:微信、支付宝等小程序平台对接的完整指南 【免费下载链接】medusa 项目提供了构建数字商务所需的组件和服务,旨在简化和加速电子商务平台的开发工作流程。 项目地址: https://gitcode.com/GitHub_Trending/me/medusa Medusa是一个强…...
戴尔Precision Pro商务笔记本回归,新一代产品聚焦便携性
看起来2026年是戴尔按下重启键的一年——在消费者和商用产品线中,戏剧性的品牌重塑都在被回归。有时候,老品牌确实是好品牌:熟悉的XPS名称和设计今年回归是有原因的,绝对不是因为戴尔Premium有正面的品牌认知度。在戴尔商务产品方…...
Docker镜像的制作
什么是Docker镜像? Docker镜像是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。镜像是容器的基础,容器是镜像的运行实例。 准备工作 安装Docker 首先确保你的系统已安装D…...
NaViL-9B效果实测:支持中英文混排表格图像的行列结构识别与内容提取
NaViL-9B效果实测:支持中英文混排表格图像的行列结构识别与内容提取 1. 模型介绍 NaViL-9B是新一代原生多模态大语言模型,专为处理复杂视觉-语言任务设计。与常规视觉模型不同,它不仅能够理解图片内容,还能精准解析表格、文档等…...
OBS高级计时器:提升直播专业度的时间管理工具
OBS高级计时器:提升直播专业度的时间管理工具 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 在直播行业竞争日益激烈的今天,精准的时间控制是提升直播质量的关键因素之一。OBS高级计时器…...
