diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimap.java b/redisson/src/main/java/org/redisson/RedissonListMultimap.java index 431bf20b9..6f70b0727 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimap.java @@ -197,9 +197,9 @@ public class RedissonListMultimap extends RedissonMultimap implement @Override - public RList get(final K key) { + public RList get(K key) { String keyHash = keyHash(key); - final String setName = getValuesName(keyHash); + String setName = getValuesName(keyHash); return new RedissonList(codec, commandExecutor, setName, null) { @@ -224,19 +224,22 @@ public class RedissonListMultimap extends RedissonMultimap implement return new CompletableFutureWrapper<>(false); } - List args = new ArrayList(c.size() + 1); + List args = new ArrayList<>(c.size() + 1); args.add(encodeMapKey(key)); encode(args, c); return commandExecutor.evalWriteAsync(RedissonListMultimap.this.getRawName(), codec, RedisCommands.EVAL_BOOLEAN, "local v = 0 " + "for i = 2, #ARGV, 1 do " - + "if redis.call('lrem', KEYS[2], 0, ARGV[i]) == 1 " - + "then v = 1 end " + + "if redis.call('lrem', KEYS[2], 0, ARGV[i]) == 1 then " + + "v = 1; " + + "end " + +"end " + + "if v == 1 and redis.call('exists', KEYS[2]) == 0 then " + + "redis.call('hdel', KEYS[1], ARGV[1]); " +"end " - + "redis.call('hdel', KEYS[1], ARGV[1]); " + "return v", - Arrays.asList(RedissonListMultimap.this.getRawName(), setName), + Arrays.asList(RedissonListMultimap.this.getRawName(), setName), args.toArray()); } diff --git a/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java b/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java index d28c0884b..6e0557eb4 100644 --- a/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java @@ -221,17 +221,24 @@ public class RedissonListMultimapTest extends RedisDockerTest { @Test public void testRemoveAll() { - RListMultimap map = redisson.getListMultimap("test1"); - map.put(new SimpleKey("0"), new SimpleValue("1")); - map.put(new SimpleKey("0"), new SimpleValue("1")); - map.put(new SimpleKey("0"), new SimpleValue("2")); - map.put(new SimpleKey("0"), new SimpleValue("3")); + RListMultimap map = redisson.getListMultimap("test1"); + map.put("0", "1"); + map.put("0", "1"); + map.put("0", "2"); + map.put("0", "3"); + + RList set = map.get("0"); + set.removeAll(Arrays.asList("4", "5")); + assertThat(map.size()).isEqualTo(4); + + set.removeAll(Arrays.asList("3")); + assertThat(map.size()).isEqualTo(3); - List values = map.removeAll(new SimpleKey("0")); - assertThat(values).containsExactly(new SimpleValue("1"), new SimpleValue("1"), new SimpleValue("2"), new SimpleValue("3")); + List values = map.removeAll("0"); + assertThat(values).containsExactly("1", "1", "2"); assertThat(map.size()).isZero(); - List values2 = map.removeAll(new SimpleKey("0")); + List values2 = map.removeAll("0"); assertThat(values2).isEmpty(); }