Redission实现分布式锁的原理

重点:

  1. 锁的获取:使用Lua脚本,利用exists+hexists+hincryby命令来保证只有一个线程能获取到锁。同时,通过pexpire命令为锁设置过期时间,防止死锁
  2. 锁的续期:看门狗,自动实现所得续期功能,1/3的过期时间为续期时间
  3. 锁的释放:通过Lua脚本,利用hexists+del确保只有持有锁的线程才能释放锁,防止误释放锁。同时利用publish命令,广播唤醒其他等待的线程
  4. 可重入锁:持有锁的线程可以多次获取同一把锁而不会被阻塞。具体是利用了Redis的hash结构。hash中key为线程id,如果重入则value+1,释放则value-1,减到0则为释放,进行del操作