Redis实现分布式锁以及Redis客户端比较
若锁存在,且唯一标识匹配:则先将锁重入计数减1 local counter = redis.call(‘hincrby’, KEYS[1], ARGV[3], -1); if (counter > 0) then – 锁重入计数减1后还大于0:表明当前线程持有的锁还有重入,不能进行锁删除操作,但可以友好地帮忙设置下过期时期 redis.call(‘pexpire’, KEYS[1], ARGV[2]); return 0; else – 锁重入计数已为0:间接表明锁已释放了。直接删除掉锁,并广播解锁消息,去唤醒那些争抢过锁但还处于阻塞中的线程 redis.call(‘del’, KEYS[1]); redis.call(‘publish’, KEYS[2], ARGV[1]); return 1; end; return nil; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56  <font style="color:rgb(77, 77, 77);">广播解锁消息有什么用? </font>**<font style="color:rgb(77, 77, 77);">是为了通知其他争抢锁阻塞住的线程,从阻塞中解除,并再次去争抢锁。</font>** <font style="color:rgb(77, 77, 77);">返回值0、1、nil有什么不一样? </font>**<font style="color:rgb(77, 77, 77...