多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 简介 悲观锁和乐观锁 * 悲观锁: 假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作 * 乐观锁: 假设不会发生并发冲突,只是在提交操作时检查是否违反数据完整性,看到的数据不是实时的,脏读 内部版本控制和外部版本控制 * 内部版本控制: `_version`自增长,修改数据后,`_version`会自动加1 * 外部版本控制: 为了保持 `_version` 与外部版本控制的数值一致,使用 `version_type=external` ,检查数据当前的version值是否小于请求中的version值,一些关系型数据库使用时间戳当做版本控制,他把查询交给es,希望es也能使用这个版本控制 # 内部版本控制 我们来保存个数据 ~~~ PUT /library/book/1 { "title": "es", "price": "3" } ~~~ 保存完,结果显示 ![](https://box.kancloud.cn/dfab927b7d89cf6312504d0e4d155293_464x266.png) 查询下 ~~~ GET /library/book/1 ~~~ 更改当前版本,比如当前版本是3 ~~~ POST /library/book/1/_update?version=3 { "doc": { "price": 15 } } ~~~ 更改完版本号加1 查询下 ~~~ GET /library/book/1 ~~~ # 外部版本控制 ~~~ POST /library/book/1?version=100&version_type=external { "doc": { "price": 20 } } ~~~ 意思就是请求,你带过去的version值要大于内部的version值就可以