3:基于乐观锁(两种)控制并发: versionexternal锁
Posted cc299
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3:基于乐观锁(两种)控制并发: versionexternal锁相关的知识,希望对你有一定的参考价值。
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"
以上是关于3:基于乐观锁(两种)控制并发: versionexternal锁的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch基于version进行乐观锁并发控制