目录
分布式锁的实现方式
- 基于数据库实现分布式锁;
- 基于缓存(Redis等)实现分布式锁;
- 基于Zookeeper实现分布式锁;
分布式锁需要考虑的问题
- 在分布式环境下,同一个方法同一时间只能由一个机器的一个线程执行
- 高可用的获取和释放锁
- 高性能的获取和释放锁
- 具备可重入特性
- 具备锁失效机制,防止死锁
- 根据业务判断是阻塞锁还是非阻塞锁
基于数据库实现分布式锁
(参考链接: https://www.jianshu.com/p/1b139f037b15)
基于数据库表实现分布式锁
- 基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。
- 先创建一个锁表
CREATE TABLE `methodLock` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`method_name` varchar(64) NOT NULL DEFAULT '' COMMENT '锁定的方法名',
`desc` varchar