加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

为什么Zookeeper天生就是一副分布式锁的胚子?

发布时间:2020-03-17 07:18:56 所属栏目:编程 来源:站长网
导读:副问题#e# 【金融特辑】光大****科技部DBA女神带你从0到1揭秘MGR 什么是漫衍式锁?漫衍式锁是节制漫衍式体系之间同步会见共享资源的一种方法。在漫衍式体系中,经常必要和谐他们的举措。 图片来自 Pexels 假如差异的体系或是统一个体系的差异主机之间共享了

              .connectString("10.231.128.95:2181,10.231.128.96:2181,10.231.128.97:2181") 

              .retryPolicy(policy) 

              .build(); 

       // 启动客户端 

       client.start(); 

 

       // 在zookeeper中界说一把锁 

       final InterProcessMutex lock = new InterProcessMutex(client, "/mylock"); 

 

       //启动是个线程 

       for (int i = 0; i <10; i++) { 

           new Thread(new Runnable() { 

               @Override 

               public void run() { 

                   try { 

                       // 哀求获得的锁 

                       lock.acquire(); 

                       printNumber(); 

                  } catch (Exception e) { 

                       e.printStackTrace(); 

                  } finally { 

                       // 开释锁 

                       try { 

                           lock.release(); 

                      } catch (Exception e) { 

                           e.printStackTrace(); 

                      } 

                  } 

              } 

          }).start(); 

      } 

 

  } 

基于数据的漫衍式锁

我们在接头行使漫衍式锁的时辰每每起首解除去基于数据库的方案,本能的会认为这个方案不足“高级”。

从机能的角度思量,基于数据库的方案机能确实不足优秀,整体机能比拟:缓存>Zookeeper、etcd>数据库。

也有人提出基于数据库的方案题目许多,不太靠得住。数据库的方案也许并不得当于频仍写入的操纵。

下面我们来相识一下基于数据库(MySQL)的方案,一样平常分为三类:

基于表记录

乐观锁

气馁锁

基于表记录

要实现漫衍式锁,最简朴的方法也许就是直接建设一张锁表,然后通过操纵该表中的数据来实现了。

当我们想要得到锁的时辰,就可以在该表中增进一笔记录,想要开释锁的时辰就删除这笔记录。

为了更好的演示,我们先建设一张数据库表,参考如下:

CREATE TABLE `database_lock` ( 

`id` BIGINT NOT NULL AUTO_INCREMENT, 

`resource` int NOT NULL COMMENT '锁定的资源', 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读