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"
    }
  • 相关阅读:
    iOS
    iOS
    iOS
    Xcodeproject详解
    Swift
    iOS
    iOS
    错误 1 无法将文件“objDebugXXX.exe”复制到“binDebugXXX.exe”。文件“binDebugXXX.exe”正由另一进程使用,因此该进程无法访问该文件
    【转载】SQL注入原理讲解
    在“安装”阶段发生异常。 System.Security.SecurityException: 未找到源,但未能
  • 原文地址:https://www.cnblogs.com/cc299/p/11032799.html
Copyright © 2011-2022 走看看