为什么Zookeeper天生就是一副分布式锁的胚子?
.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 '锁定的资源', (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |