分布式锁原子性111
好处11111111
config1111111
reddisson11111111
误删除问题111111
分布式锁11111111
分布式锁1111111
失效情况111111
redisson配置类
单机模式
分布式锁的使用场景
Redission使用lua脚本实现,防误删,死锁等问题
为什么用分布式锁?
集群部署情况下,单机锁无法保证外部资源的访问安全性。
分布式锁的类型:
使用数据库自带的锁(悲观锁,乐观锁)实现,适用于并发量较小的场景
使用zookeeper分布式锁
使用Redisson分布式锁
Redis分布式锁怎么防止死锁问题?
什么是死锁?比如有三个线程A,B,C,当线程A获取到锁之后,由于某些原因线程A挂了,此时线程A无法释放锁,导致了线程B,线程C无法获取到锁,就会导致死锁发生。
解决方案:给锁设置过期时间expire (+ 自动续期)
Redis分布式锁怎么防止误删?
什么情况下会产生分布式锁中的误删?所谓的误删就是锁的过期时间设置的不准确,在线程A还没有执行完之前,锁的过期时间就到了,锁被提前删除了,其他线程B获取到了这把锁。此时线程A执行完毕了,它把线程B的锁给误删了,从而导致误删问题的出现。
解决方案:使用UUID设置锁的value,删之前判断一下,是不是自己的锁,是就删除,不是就不删除。
111111111111111111111111111111111111111111111111111111111111111111111111111112222
分布式布局真的号好好好哈
fbs
Redisson分布式锁:
这是配置类
然后再ctl中去使用
1.获取锁
2.加锁
3.解锁
他的底层原理:
防止死锁的方法
在添加了过期时间时,时间到了,就会存在一个误删问题,解决方法如下图所示:
超卖之类的加锁之------单机锁
sy 是加在public之后,
re是需要在方法之外new一个再使用
单机锁的缺点:
其实问题之处就是,加的这个锁,是在服务与数据中间件之间的,只能解决一个进程安全问题,无法跨进程,就会导致失效。如下图所示: