# 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、运行时开启并行执行选项,每次运行三个或三个以上进程
