redis 做分布式锁

ok 我们从最基础的一步步来

加锁:

1.setNx没有expire,拿锁线程挂掉后,死锁

2.setNx然后exipre分两步做,setNx后redis宕机,或者线程挂掉,死锁

 

3.SETNX resource_name my_random_value PX 30000 加锁和过期原子操作 ok

 

解锁:

1.直接delete,可能因为业务超时删掉其他线程获得的锁

2.先get,对比唯一id后再delete,分2步做不是原子操作,不能保证delete的时候唯一id还是get是的那个

3.lua或者事务 原子操作get和delete,ok

 

超时:

1.业务超时,导致之前线程持有的锁过期,其他线程重新获得锁进入临界区,调大锁的超时时间,但是又会有线程挂掉,锁过期释放时间较长的问题

 

主宕机锁没有同步到从,从变主后导致多个线程获得锁

1.有个redLock的思想,把加锁成功的条件变成多master集群中超过半数的机器加锁成功,才算获得锁。简直了

 

posted @ 2020-09-09 15:47  l2c  阅读(133)  评论(0)    收藏  举报