分布式锁-个人项目总结
1. 数据库乐观锁
使用数据库其中一个字段实现即可
2. Redis的分布式锁
案例
网址
https://www.cnblogs.com/linjiqin/p/8003838.html
代码地址
本地
原理
四个条件
1 互斥性
在任意时刻,只有一个客户端能持有锁
set的时候设置值NX,存在key就不加锁
2 不会发生死锁
客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁
set的时候设置有效期
3 具有容错性
只要大部分的Redis节点正常运行,客户端就可以加锁和解锁
redis集群
4 解铃还须系铃人
加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了
set的时候value存入客户端requestId,最好加密
3 zookeeper分布式锁
更新redis之前,获取对象id的分布式锁
拿到分布式锁之后,根据时间版本去比较
拿不到分布式锁,不断轮询等待