redis分布式锁
一、锁的种类
- 单机版同一个JVM虚拟机内,synchronized或者lock接口
- 分布式多个不同JVM虚拟机,单机的线程锁机制不再起作用,资源类在不同的服务器之间共享了。
二、一个靠谱分布式锁需要具备的条件和刚需
-
独占性
任何时刻只能有且仅有一个线程持有
-
高可用
若在redis集群环境下,不能因为某一个节点挂了而出现获取锁和释放锁失败的情况
高并发情况下,依旧性能良好
-
防死锁
杜绝死锁,必须有超时控制机制或者撤销操作,有个兜底终止跳出方案
-
不乱强
防止张冠李戴,不能私下unlock别人的锁,只能自己加锁自己释放,自己上的锁必须自己解
-
重入性
同一个节点的同一个线程如果获得锁之后,它也可以再次获取这个锁
三、分布式锁
- setnx key value
- set key value [EX seconds] [PX milliseconds] [NX] [XX]
四、重点
JUC中AQS锁的规范落地参考,可冲入锁考虑,lua脚本,redis命令 逐步实现分布式锁