Skip to content

Commit 60c589f

Browse files
committed
bugfix: 如果redisTemplate指定redis prefix,会导致加锁成功,无法解锁
1 parent b89ff6a commit 60c589f

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/locks/RedisTemplateSimpleDistributedLock.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
9393
@Override
9494
public void unlock() {
9595
if (valueThreadLocal.get() != null) {
96-
// 提示: 必须指定returnType, 类型: 此处必须为Long, 不能是Integer
97-
RedisScript<Long> script = new DefaultRedisScript<>("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end", Long.class);
98-
redisTemplate.execute(script, Collections.singletonList(key), valueThreadLocal.get());
96+
redisTemplate.executePipelined((RedisCallback<String>) connection -> {
97+
connection.eval("if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end".getBytes(),
98+
ReturnType.INTEGER, 1, key.getBytes(), valueThreadLocal.get().getBytes());
99+
return null;
100+
});
99101
valueThreadLocal.remove();
100102
}
101103
}

0 commit comments

Comments
 (0)