一, 分布式锁方案比较
二, 关于 Redis 分布式锁基础知识
三, Redis 加解分布锁的正确姿势
四, Redis 分布式加锁的主要流程
产生随机数, 可用 UUID , 存储起来, 一般存储在 ThreadLocal 中, 以便解锁用;
调用 Redis 的 SETNX 命令将随机数当作 value 存入 ,key 为 taskId, 同时 设置过期时间 .(实际项目中过期时间的多少主要是取决任务估算的执行时间, 一般为估算执行时间 * 2, 如该任务的估算时间是 2m, 则过期就要设置 4m);
如果返回 ok, 说明加锁成功, 否则失败;
五, Redis 分布式解锁的主要流程
调用 lua 脚本 进行解锁, 保证原子性;
Lua 脚本实现: 判断 key 的值和我们存入的 UUID 随机数是不是相等 , 是的话, 则调用 DEL 指令 进行删除操作;
六, 加锁代码
1. 实现类继承 LOCK 类部分代码
2. 阻塞式加锁代码
3. 非阻塞式加锁代码
七, 用 ThreadLocal 存储加锁产生的随机值
八, 解锁代码
1. 解锁代码截图
2. Unlock.lua 脚本代码
来源: http://www.tuicool.com/articles/iM77jiq