redis分布式锁

redis分布式锁

setnx key value 
使用setnx设置key值,如果该值存在不做任何操作
设置setnx需要加上过期时间,防止应为系统宕机造成锁无法释放,造成死锁

使用setnx设置锁,加入当前a进程执行中,因为网络原因卡住了,这个时候setnx的过期时间到了,就会自动释放锁,这个时候B进程就会抢占这把锁,重新上锁,这个时候如果a恢复了访问,重新执行释放锁的操作,就会把原本属于b上的锁给释放掉

所以,每次加锁的时候需要对当前的锁生成一个独立的id,释放锁的时候去判断,当前释放的锁的id是否相同,相同再去释放,但这种依然会出现重复释放锁的问题,在释放锁的时候卡顿了,这个时候就会出现重复释放锁

解决方案:
1.锁续命:当我们设置锁后,使用定时任务,每隔一段时间去检测一下当前的锁是否存在,如果存在就延长过期时间,保证了锁不会因为超时而过期。可以使用redisson来使用

 

posted @ 2022-07-12 16:00  -韩  阅读(47)  评论(0编辑  收藏  举报