为何需要分布式锁
- 效率:使用分布式锁可以避免不同节点重复相同的工作,这些工作会浪费资源。比如用户付了钱之后有可能不同节点会发出多封短信。
- 正确性:加分布式锁同样可以避免破坏正确性的发生,如果两个节点在同一条数据上面操作,比如多个节点机器对同一个订单操作不同的流程有可能会导致该笔订单最后状态出现错误,造成损失。
分布式锁的特点
- 互斥:不同节点的不同线程间互斥
- 可重入性:同一个节点上的同一个线程如果获取了锁之后,也可以再次获取这个锁
- 锁超时:可本地锁一样支持锁超时,防止死锁
- 高效和高可用
- 支持阻塞和非阻塞
- 支持公平锁和非公平锁:公平锁的意思是按照请求加锁的顺序获得锁,非公平锁就相反是无序的。这个一般来说实现的比较少。
实现
- mysql
- redis
- …
转载自:https://juejin.im/post/6844903863363829767