分布式锁的三种实现方式详解

分布式锁的三种实现方式:

1、基于数据库:1)利用唯一索引约束;2)利用数据库自带排他锁

2、基于缓存:利用setnx()返回值

3、基于ZooKeeper:1)利用ZooKeeper同一个目录下只能有一个唯一文件名;2)利用ZooKeeper分布式锁客户端Curator

注:需要考虑的因素:单点、可重入、阻塞、失效时间

一、基于数据库的实现方式

基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。

1、创建一个表:

DROP TABLE IF EXISTS `method_lock`; CREATE TABLE `method_lock` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT \'主键\', `method_name` varchar(64) NOT NULL COMMENT \'锁定的方法名\', `desc` varchar(255) NOT NULL COMMENT \'备注信息\', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uidx_method_name` (`method_name`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT=\'锁定中的方法\';

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgfjf.html