https://blog.csdn.net/zhw21w/article/details/129563500
以上的这块代码,还是有坑:
if (requestId.equals(jedis.get(lockKey))) { //判断一下是不是自己的requestId
unlock(lockKey);//释放锁
}
因为判断是不是当前线程加的锁和释放锁不是一个原子操作。如果调用unlock(lockKey)释放锁的时候,锁已经过期,所以这把锁已经可能已经不属于当前客户端,会解除他人加的锁。
if redis.call('get',KEYS[1]) == ARGV[1] then
return redis.call('del',KEYS[1])
else
return 0
end;