ES7.16.2基础 *** 作之锁(十八)

ES7.16.2基础 *** 作之锁(十八),第1张

ES7.16.2基础 *** 作之锁(十八)
###########(一)全局锁################
## 创建全局锁
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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存