• 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"
    }
  • 相关阅读:
    PTA 1022 Digital Library (30分) 坑多需谨慎!!!
    PAT 1013 Battle Over Cities (25分) 图的连通分量+DFS
    PAT 1021 Deepest Root (25分) 从测试点3超时到满分再到代码优化
    Java面向对象-------多态总结
    C后端设计开发
    C后端设计开发
    C后端设计开发
    C后端设计开发
    C后端设计开发
    一个真正的客户端非阻塞的 connect
  • 原文地址:https://www.cnblogs.com/cc299/p/11032799.html
Copyright © 2020-2023  润新知