diff --git a/src/main/java/org/redisson/RedissonMultimap.java b/src/main/java/org/redisson/RedissonMultimap.java index a072520a5..1075b2e33 100644 --- a/src/main/java/org/redisson/RedissonMultimap.java +++ b/src/main/java/org/redisson/RedissonMultimap.java @@ -22,13 +22,12 @@ import java.util.AbstractSet; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.concurrent.TimeUnit; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.redisson.client.codec.Codec; import org.redisson.client.codec.LongCodec; @@ -167,24 +166,24 @@ public abstract class RedissonMultimap extends RedissonExpirable implement } try { - List args = new ArrayList(keys.length*2); - List hashes = new ArrayList(); + List mapKeys = new ArrayList(keys.length); + List listKeys = new ArrayList(keys.length + 1); + listKeys.add(getName()); for (K key : keys) { byte[] keyState = codec.getMapKeyEncoder().encode(key); - args.add(keyState); + mapKeys.add(keyState); String keyHash = hash(keyState); String name = getValuesName(keyHash); - hashes.add(name); + listKeys.add(name); } - args.addAll(hashes); return commandExecutor.evalWriteAsync(getName(), codec, RedisCommands.EVAL_LONG, - "local res = redis.call('hdel', KEYS[1], unpack(ARGV, 1, #ARGV/2)); " + + "local res = redis.call('hdel', KEYS[1], unpack(ARGV)); " + "if res > 0 then " + - "redis.call('del', unpack(ARGV, #ARGV/2, #ARGV)); " + + "redis.call('del', unpack(KEYS, 2, #KEYS)); " + "end; " + "return res; ", - Collections.singletonList(getName()), args.toArray()); + listKeys, mapKeys.toArray()); } catch (IOException e) { throw new RuntimeException(e); }