分布式锁的问题
为什么用分布式锁?
集群部署情况下,单机锁无法保证外部资源的访问安全性。
分布式锁的类型:
使用数据库自带的锁(悲观锁,乐观锁)实现,适用于并发量较小的场景
使用zookeeper分布式锁
使用Redisson分布式锁
Redis分布式锁怎么防止死锁问题?
什么是死锁?比如有三个线程A,B,C,当线程A获取到锁之后,由于某些原因线程A挂了,此时线程A无法释放锁,导致了线程B,线程C无法获取到锁,就会导致死锁发生。
解决方案:给锁设置过期时间expire (+ 自动续期)
Redis分布式锁怎么防止误删?
什么情况下会产生分布式锁中的误删?所谓的误删就是锁的过期时间设置的不准确,在线程A还没有执行完之前,锁的过期时间就到了,锁被提前删除了,其他线程B获取到了这把锁。此时线程A执行完毕了,它把线程B的锁给误删了,从而导致误删问题的出现。
解决方案:使用UUID设置锁的value,删之前判断一下,是不是自己的锁,是就删除,不是就不删除。