目录
1、分布式锁
作为分布式锁,我觉得至少得:1. 资源唯一且能异步多线程访问; 2. 能改变状态(加锁 / 开锁);
【数据库】你可以设置字段唯一,可以创建 state 字段;
【redis】 的key唯一,能设置value状态;
【zookeeper】文件名唯一,状态通过创建文件,删除文件来表示状态;
分布式锁存在的问题:
1. 因为是分布式大系统,若分布式锁挂了影响甚大;
2. 是锁就得考虑死锁;redis设置过期时间,数据库感觉可以考虑定时开锁,zookeeper貌似也可以设置定时任务开锁;
2、实现方式
2.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 '锁定的方法名',
`state` tinyint NOT NULL COMMENT '1:未分配;2:已分配',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`version` int NOT N

本文介绍了分布式锁的三种常见实现方式:数据库、Redis和Zookeeper。针对每种方式,详细阐述了加锁和解锁的原理与操作,包括数据库的SELECT...FOR UPDATE与UPDATE策略,Redis的SETNX、expire与delete命令,以及Zookeeper通过创建唯一文件节点实现锁竞争。同时,讨论了分布式锁可能面临的问题,如死锁和系统稳定性。
最低0.47元/天 解锁文章
346

被折叠的 条评论
为什么被折叠?



