diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/locks/RedisTemplateSimpleDistributedLock.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/locks/RedisTemplateSimpleDistributedLock.java index 3f5ce4d69..e02a5fe67 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/locks/RedisTemplateSimpleDistributedLock.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/locks/RedisTemplateSimpleDistributedLock.java @@ -93,9 +93,11 @@ public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { @Override public void unlock() { if (valueThreadLocal.get() != null) { - // 提示: 必须指定returnType, 类型: 此处必须为Long, 不能是Integer - RedisScript script = new DefaultRedisScript<>("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end", Long.class); - redisTemplate.execute(script, Collections.singletonList(key), valueThreadLocal.get()); + redisTemplate.executePipelined((RedisCallback) connection -> { + connection.eval("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end".getBytes(), + ReturnType.INTEGER, 1, key.getBytes(), valueThreadLocal.get().getBytes()); + return null; + }); valueThreadLocal.remove(); } }