分布式锁
本地锁
jdk中所有锁,比如synchronized,Lock等都是本地锁
Lock原理本质是抢夺堆中AQS实例的state属性的修改权,哪个能将其从0修改到1,谁就抢夺到了锁。
所以锁的本质是抢夺一个唯一标志位,抢到了就是锁住了,其他线程只能等待。
在分布式部署场景,比如多个容器部署时,本地锁是不起作用的。所以需要分布式锁。
分布式锁
将标志位放到一个单独的公共的地方的,比如redis或者mysql,这就是分布式锁。
用redis实现分布式锁
redis中有一个命令
setnx: 给redis中存储一个key,如果这个key不存在才保存,否则不保存。