###########(一)全局锁################
## 创建全局锁
PUT /fs/lock/1/_create
{"name":"lisi","sex":1}
##删除全局锁
DELETE /fs/lock/global
###########(二)document锁################
##1、document锁:对某个doc加锁
POST /fs/_update/1
{
"upsert": {"process_id": 123},
"script": {
"source": "if ( ctx._source.process_id != process_id ) { assert false }; ctx.op = 'noop';",
"params": {
"process_id": 123
}
}
}
##2、更新数据
POST fs/_update/1
{"doc":{"name":"lise"}}
##3、释放document锁
DELETE fs/lock/1
###########(三)共享锁及排他锁################
##共享锁:线程间共享数据
##排他锁:线程间相互独立
##1、 共享锁:每次有一个线程读数据时,执行一次加锁操作
POST /fs/_update/1
{
"upsert": {
"lock_type": "shared",
"lock_count": 1
},
"script": {
"lang": "painless",
"source": "if (ctx._source.lock_type == 'exclusive') { Debug.explain('one thread is writing data, the lock is exclusive now'); } ctx._source.lock_count++"
}
}
##2、加排他锁,报错
PUT /fs/lock/1/_create
{ "lock_type": "exclusive" }
##3、释放共享锁:
##释放1次lock_count减1,减到0时,说明所有的共享锁已经释放完毕,就把这个doc删除掉
POST /fs/_update/1
{
"script": {
"lang": "painless",
"source": "if ( --ctx._source.lock_count == 0) { ctx.op = 'delete' }"
}
}
##4、再次加排他锁,成功
PUT /fs/lock/1/_create
{ "lock_type": "exclusive" }
##5、删除索引,释放锁
DELETE fs/lock/1
ES7.16.2基础操作之锁(十八)
最新推荐文章于 2023-10-27 10:21:24 发布