Redis实现分布式锁
1.锁的处理
单应用中使用锁:单进程多线程
synchroize , Lock
分布式应用中使用的锁:多进程
2.分布式锁的实现方式
数据库的乐观锁
基于zookeeper的分布式锁
基于redis的分布式锁
3.分布式锁的注意事项
互斥性:在任意时刻,只有一个客户能持有锁
同一性:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了
避免死锁:即使有一个客户端在持有锁的期间奔溃而没有主动解锁,也能保证后续其他客户端能加锁
4.实现分布式锁
4.1获取锁
在SET命令中,有很多选项可用来修改命令的行为,以下是SET命令可用选项的基本语法
EX seconds -设置指定的到期时间以秒为单位。
PX milliseconds-设置指定的到期时间(以毫秒为单位)。
NX -仅在键不存在时设置锁。
XX-只有在键已存在时才设置。
方式1(使用set命令实现)
使用redis的set命令实现获取分布式锁
@param lockkey 可以就是锁
@param requestId 请求ID,保证同一性
@param expireTime 过期时间,避免死
方式2(使用setnx命令实现)
4.2释放锁