Redis分布式锁

 2024-03-31    0 条评论    514 浏览

redis

简单分布式锁

线程进入则缓存锁值(lock),执行完毕后删除锁值(unlock)

死锁问题

设计锁必然要考虑死锁问题。

比如分布式环境中,某个服务拿到锁后死了,对于其他服务就发生了死锁

锁过期时间

设置添加到Redis锁的过期时间,这样如果有拿锁的服务死了,不至于死锁;

锁过期时间过短

分布式锁的过期时间不好设置,因为无法预估服务正常执行会花费多长时间;

如果某服务拿锁后执行时间过长,导致分布式锁过期,其他服务又拿到锁,出现并发安全问题;

两种解决方法:

  1. 分布式锁过期时间尽量设置长一些,但是当拿锁服务死掉,其他服务要很长时间才能拿到锁;
  2. 看门狗:服务拿锁后启动一个线程,拿锁期间定期维护锁过期时间,释放锁后线程结束;