分布式锁的实现分析
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、设计目标 分布式部署的应用集群中保证数据更新的互斥性,且程序出现异常时,锁能够自动释放,避免死锁发生。 2、为什么要使用分布式锁 为了保证分布式部署的应用集群中同一时间只有一个客户端对共享资源进行操作。根据锁的用途再细分: 对共享资源的操作是幂等性的,使用分布式锁能够避免重复操作,从而提高效率。 对共享资源的操作是非幂等的,比如订单状态的修改,如果多个客户端同时操作,最后的结果可能很遭,使用分布式锁可以让各个客户端分散时间操作。 3、分布式锁应具备哪些条件 这也是分布式锁的关键技术。 互斥性 这个是分布式锁的基本要求,分布式锁需要保证不同客户端的不同线程之间互斥。 可重入性 支持锁的重入,减少资源消耗。 锁超时释放 获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端无法获取此锁,锁超时释放是为了避免死锁。 安全性 锁只能被持有该锁的用户删除,而不能被其他用户删除。 高效与高可用 加锁与解锁需要高效,并保证高可用,当部分节点宕机,客户端仍能获取锁或者释放锁。 支持阻塞与非阻塞 阻塞就是线程获取不到锁一直阻塞,增加超时时间可以防止一直阻塞。非阻塞则获取不到锁不阻塞线程。 支持公平与非公平 公平锁就是按照加锁的顺序获取到锁,非公平锁即无序。 4、基于Redis 4.1、 从一个问题开始 问题