关于“分布式锁”

爷,独闯天下 提交于 2019-12-16 23:27:11

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

为什么需要分布式锁

直接作用是保证同一时刻同一代码不被重复执行, 更深一层目的其实是为了保证“功效性”和“正确性”.

  • 功效性(Efficiency)

即节省计算机资源, 减少不必要的重复执行. 如果只是单纯地保证功效性, 一般可以容忍锁出现失误, 因为不会对执行结果造成影响.

  • 准确性(Correctness)

 即程序执行结果不会出现错误, 数据不会出现不一致. 这种场景下, 一般不可容忍锁出现失误.

如何实现分布式锁

可以看到网上有很多民众给出了自己的demo, 但仔细研究发现demo离“工业级”还是有一定差距. 如果要使用分布式锁, 我们最好去参考或直接使用一些比较成熟的框架. 

分布式环境下, 实现锁机制, 需要基于一个集中式存储, 比如: mysql(或其他数据库)、redis、zookeeper, 简单对比如下: 

中间件 原理 特点 参考框架
mysql InnoDB事务引擎的行级锁 性能差 Quartz
redis 原子命令setNX

性能高

单点实现简单

集群实现稍复杂

Redisson
zookeeper 临时顺序节点 实现复杂 Curator
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!