一、前言
分布式锁是控制分布式系统之间同步访问共享资源的一种方式,具体概念可自行查询。分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。现在我们基于Redis实现分布式锁。
二、Redis分布式锁需要解决的问题
1、解锁失败可能导致死锁(可通过设置超时时间解决,但引申出问题2、问题3)
2、加锁与超时设置无法保证原子性,导致超时设置失败,造成死锁(可通过lua脚本在服务端执行解决)
3、解锁时误删(可通过为锁的值设置唯一值,当解锁时进行唯一值对比)
三、实现
1、加锁lua脚本实现
2、解锁lua脚本实现
3、java包含变量
4、 加锁java实现:
5、解锁java实现:
java端实现代码较多,这里只贴了关键性代码