您当前的位置: 首页 >  I.T10001

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

I.T10001 发布时间:2022-01-01 20:03:31 ,浏览量:9

###########(一)全局锁################
## 创建全局锁
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

关注
打赏
1688896170
查看更多评论

I.T10001

暂无认证

  • 9浏览

    0关注

    154博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0476s