分布式锁

60 阅读1分钟

分布式锁

本地锁

jdk中所有锁,比如synchronized,Lock等都是本地锁

Lock原理本质是抢夺堆中AQS实例的state属性的修改权,哪个能将其从0修改到1,谁就抢夺到了锁。
所以锁的本质是抢夺一个唯一标志位,抢到了就是锁住了,其他线程只能等待。
在分布式部署场景,比如多个容器部署时,本地锁是不起作用的。所以需要分布式锁。

分布式锁

将标志位放到一个单独的公共的地方的,比如redis或者mysql,这就是分布式锁。

用redis实现分布式锁

redis中有一个命令

setnx: 给redis中存储一个key,如果这个key不存在才保存,否则不保存。

image.png

image.png

image.png

image.png

image.png

image.png

image.png