博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3:基于乐观锁(两种)控制并发: version、external锁
阅读量:5103 次
发布时间:2019-06-13

本文共 1031 字,大约阅读时间需要 3 分钟。

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"
}

转载于:https://www.cnblogs.com/cc299/p/11032799.html

你可能感兴趣的文章
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
iframe跨域与session失效问题
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
Hash和Bloom Filter
查看>>
SQL Server获取月度列表
查看>>
python常用函数
查看>>
python 描点画圆
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
pycharm 如何设置方法调用字体颜色
查看>>
VUE源码解析心得
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
整体二分——[Poi2011]Meteors
查看>>
数据库3
查看>>
delphi之事件
查看>>