Redis使用-分布式锁【lua实现】

2018-11-16  本文已影响0人  福佑壮壮

一、前言

分布式锁是控制分布式系统之间同步访问共享资源的一种方式,具体概念可自行查询。分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。现在我们基于Redis实现分布式锁。

二、Redis分布式锁需要解决的问题

1、解锁失败可能导致死锁(可通过设置超时时间解决,但引申出问题2、问题3)
2、加锁与超时设置无法保证原子性,导致超时设置失败,造成死锁(可通过lua脚本在服务端执行解决)
3、解锁时误删(可通过为锁的值设置唯一值,当解锁时进行唯一值对比)

三、实现

1、加锁lua脚本实现

加锁脚本

2、解锁lua脚本实现

解锁脚本

3、java包含变量

变量定义

4、 加锁java实现:

加锁实现

5、解锁java实现:

解锁实现

java端实现代码较多,这里只贴了关键性代码

上一篇 下一篇

猜你喜欢

热点阅读