空心|最全分布式锁设计方案( 五 )

  • ZookeeperLockController.java:写一个接口 , 用Curator加锁 , 然后用浏览器进行访问
@RestController@RequestMapping("/zookeeper-lock")public class ZookeeperLockController {@GetMapping("/testLock") public String testLock() {// 获取锁boolean lockResult = ZookeeperUtil.interProcessMutex("testLock");if (lockResult) {try {// 模拟执行业务逻辑TimeUnit.MINUTES.sleep(1L);} catch (InterruptedException e) {e.printStackTrace();}// 释放锁ZookeeperUtil.releaseLock("testLock");return "success";} else {return "fail";} }}打开一个浏览器窗口访问 , 后台打印出获取锁成功的日志 , 在1分钟之内 , 开启另一个窗口再次访问 , 打印出获取锁失败的日志 , 说明分布式锁生效了 。
七、实现分布式锁的各方案比较
  • 基于数据库实现最简单 , 不需要引入第三方应用 。 但是因为每次加锁和解锁都要进行IO操作 , 性能不是很好 。
  • 基于redis实现比较均衡 , 性能很好 , 也不是很难 , 比较可靠 。
  • 基于zookeeper实现难度较大 , 因为需要维护一个zookeeper集群 , 如果项目原本没有用到zookeeper , 还是用redis比较好 。
本文项目地址:分布式锁
本文分享自微信公众号 - java开发那些事(javawebkf) 。 如有侵权 , 请联系删除 。


推荐阅读