【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
为什么需要分布式锁
直接作用是保证同一时刻同一代码不被重复执行, 更深一层目的其实是为了保证“功效性”和“正确性”.
- 功效性(Efficiency)
即节省计算机资源, 减少不必要的重复执行. 如果只是单纯地保证功效性, 一般可以容忍锁出现失误, 因为不会对执行结果造成影响.
- 准确性(Correctness)
即程序执行结果不会出现错误, 数据不会出现不一致. 这种场景下, 一般不可容忍锁出现失误.
如何实现分布式锁
可以看到网上有很多民众给出了自己的demo, 但仔细研究发现demo离“工业级”还是有一定差距. 如果要使用分布式锁, 我们最好去参考或直接使用一些比较成熟的框架.
分布式环境下, 实现锁机制, 需要基于一个集中式存储, 比如: mysql(或其他数据库)、redis、zookeeper, 简单对比如下:
中间件 | 原理 | 特点 | 参考框架 |
mysql | InnoDB事务引擎的行级锁 | 性能差 | Quartz |
redis | 原子命令setNX | 性能高 单点实现简单 集群实现稍复杂 |
Redisson |
zookeeper | 临时顺序节点 | 实现复杂 | Curator |
来源:oschina
链接:https://my.oschina.net/wangxu3655/blog/3143778