kekingcn/spring-boot-klock-starter

问下为什么解锁使用了异步强制解锁?有什么必要使用它嘛?使用异步强制解锁有什么优点嘛?相比于正常的同步解锁

zyc12345 opened this issue · 1 comments

问下为什么解锁使用了异步强制解锁?有什么必要使用它嘛?使用异步强制解锁有什么优点嘛?相比于正常的同步解锁

没啥区别,我们最后还是get结果了。解锁逻辑更直接点,直接删除key值了,具体逻辑可以参看下面的lua代码
forceUnlockAsync:

          "if (redis.call('del', KEYS[1]) == 1) then "
                 "redis.call('publish', KEYS[2], ARGV[1]); "
                 "return 1 "
                 "else "
                 "return 0 "
                "end",

unlockInnerAsync:

  "if (redis.call('exists', KEYS[1]) == 0) then " +
                    "redis.call('publish', KEYS[2], ARGV[1]); " +
                    "return 1; " +
                "end;" +
                "if (redis.call('hexists', KEYS[1], ARGV[3]) == 0) then " +
                    "return nil;" +
                "end; " +
                "local counter = redis.call('hincrby', KEYS[1], ARGV[3], -1); " +
                "if (counter > 0) then " +
                    "redis.call('pexpire', KEYS[1], ARGV[2]); " +
                    "return 0; " +
                "else " +
                    "redis.call('del', KEYS[1]); " +
                    "redis.call('publish', KEYS[2], ARGV[1]); " +
                    "return 1; "+
                "end; " +
                "return nil;",