# distributed-lock **Repository Path**: FWEM/distributed-lock ## Basic Information - **Project Name**: distributed-lock - **Description**: 主要介绍一下分布式锁以及常规的分布式锁实现方案 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-06-24 - **Last Updated**: 2022-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # distributed-lock #### 介绍 工程内包括了分布式锁常规实现方案,包含以下内容 - mysql - 锁表 - 乐观锁 - 悲观锁 - zookepper - zookepper自实现分布式锁代码 - curator框架下的InterProcessMutex分布式锁使用及介绍 - redis - 基于jedis自实现分布式锁代码 - redisson框架下的可重入分布式锁使用及介绍 `关于该工程的代码的详细解析,请见如下链接`[https://blog.csdn.net/weixin_43900244/article/details/118212261](https://blog.csdn.net/weixin_43900244/article/details/118212261) #### 运行前准备 **环境安装** 1、mysql数据库(笔者版本8.0.21) 2、redis数据库(笔者版本3.2.100) 3、zookeeper安装(笔者版本3.7.0) `所有windows环境下的安装包都上传到了百度网盘: `[https://pan.baidu.com/s/1wSsKuS2fN7fiS8L-qONHnw](https://pan.baidu.com/s/1wSsKuS2fN7fiS8L-qONHnw) `密码:zzkk` **数据库表初始化** 1、在mysql下创建数据库,名为:distribute_lock(这里使用navicat创建) 2、创建数据库表,名为database_lock ```sql create table `database_lock`( `id` BIGINT NOT NULL AUTO_INCREMENT, `resource` INT NOT NULL COMMENT '锁资源', `description` varchar(1024) NOT NULL DEFAULT "" COMMENT '描述', PRIMARY KEY (`id`), UNIQUE KEY `resource` (`resource`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库分布式锁表'; ``` 3、创建数据库表,名为database_lock_2,并且插入一条原始数据 ```sql # 创建数据库表 create table `database_lock_2`( `id` BIGINT NOT NULL AUTO_INCREMENT, `good_name` VARCHAR(256) NOT NULL DEFAULT "" COMMENT '商品名称', `good_count` INT NOT NULL COMMENT '商品数量', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库分布式锁表2'; # 插入原始数据 insert into database_lock_2 (good_name,good_count) values ('医用口罩',10); ``` **工程内配置文件修改** 1、mysql配置文件修改 resource目录下db.properties,修改driver、url、账号、密码 2、zookeeper配置文件修改 resource目录下zookeper.properties,修改zk.servers 3、redis配置文件修改 resource目录下redis.properties,修改ip、port、database、密码 #### 运行 1、开启mysql、redis、zookepper服务 2、全部分布式锁的入口类都在对应名称目录下的event包中 - mysql分布式锁 - zookepper分布式锁 - redis分布式锁 3、运行时开启并行执行选项,每次运行三个或三个以上进程