Java分布式:分布式鎖之數據庫實現
分布式鎖系列教程重點分享鎖實現原理
鎖實現原理
創建一張名為methodLock的數據庫表,為方法名字段(method_name)添加唯一性約束。
CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `method_name` varchar(64) NOT NULL DEFAULT '' COMMENT '鎖定的方法名', `desc` varchar(1024) NOT NULL DEFAULT '備注信息', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '保存數據時間,自動生成', PRIMARY KEY (`id`), UNIQUE KEY `uidx_method_name` (`method_name `) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='鎖定中的方法';
每次訪問方法前,都執行插入操作:
insert into methodLock(method_name,desc) values (‘method_name’,‘desc’)
一旦插入成功,即認為此線程上鎖成功,若插入失敗,可執行while語句,在最大等待時間內,持續嘗試插入。
當方法執行完業務操作以后,執行DELETE語句,即視為放棄鎖,讓其他線程競爭鎖資源。
delete from methodLock where method_name ='method_name'
圖解
參考資料
- https://www.hollischuang.com/archives/1716
- https://blog.csdn.net/u013256816/article/details/92854794