###########(一)全局锁################ ## 创建全局锁 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)