zoukankan      html  css  js  c++  java
  • 3:基于乐观锁(两种)控制并发: version、external锁

    ES是基于乐观锁进行并发控制的。
    如果有并发的业务场景,可以直接使用ES内置乐观锁机制
    使用的时候,java程序需要先Get指定的记录,获取到版本号,然后Put的时候,带着该版本号,请求更新。
    ES只有判断到 该记录的 version = 请求中的version值 时,才能进行更新。如果不相等,则舍弃。
     
    下面演示如何使用乐观锁:
     
    1、 先创建一条记录,此时ES返回信息中会有标识: version=1
    PUT  /test_index/test_type/1
    {
        "f1":"test f1"
    }
    2、带着version=1执行Put更新,能更新成功
    PUT /test_index/test_type/1?version=1
    {
        "f1":"test Client 2"
    }
    3、另一个客户端也在同时做了Get查询,得到version=1,此时它带着version=1执行put时,会报错:version不一致。即使大于也不行
    PUT /test_index/test_type/1?version=1
    {
        "f1":"test Client 3"
    }
    4、出现这种情况后,java程序应再次Get一次,得到新的版本号
    GET  /test_index/test_type/1
    5、 再发起一次请求,带着刚得到的版本号。此时能更新成功
    PUT /test_index/test_type/1?version=2
    {
        "f1":"test Client 3"
    }
     
    -----------------------------------------------------External 锁------------------------------------------------------------------------------------------
     
    1. 使用external锁的时候,ES判断,只要请求的version值 > 实际记录的version值,即可更新。等于的话,更新失败
    PUT /test_index/test_type/2
    {
        "f1":"test f1"
    }
    PUT /test_index/test_type/2?version=2&version_type=external
    {
        "f1":"test f2"
    }
  • 相关阅读:
    VSCode中按ESLint规则格式化Javascript代码
    VSCode设置资源管理器字体大小
    Windows下利用安装压缩包安装MySQL
    Windows部署Apache 2.4.46及PHP 8.0.3
    npm设置国内镜像
    IDEA运行Tomcat输出信息乱码
    深入理解jvm虚拟机读书笔记-Java内存区域与内存溢出异常
    Navicat Premium
    mysql安装
    ElasticSearch 基础
  • 原文地址:https://www.cnblogs.com/cc299/p/11032799.html
Copyright © 2011-2022 走看看