diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimap.java b/redisson/src/main/java/org/redisson/RedissonListMultimap.java index 87503b45e..2f6af35b1 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimap.java @@ -310,7 +310,9 @@ public class RedissonListMultimap extends RedissonMultimap implement "redis.call('hset', KEYS[1], ARGV[1], ARGV[2]); " + "local members = redis.call('lrange', KEYS[2], 0, -1); " + "redis.call('del', KEYS[2]); " + - "redis.call('rpush', KEYS[2], unpack(ARGV, 3, #ARGV)); " + + "if #ARGV > 2 then " + + "redis.call('rpush', KEYS[2], unpack(ARGV, 3, #ARGV)); " + + "end; " + "return members; ", Arrays.asList(getRawName(), setName), params.toArray()); } diff --git a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java index 710ddd244..8b562e61b 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java @@ -309,7 +309,9 @@ public class RedissonSetMultimap extends RedissonMultimap implements "redis.call('hset', KEYS[1], ARGV[1], ARGV[2]); " + "local members = redis.call('smembers', KEYS[2]); " + "redis.call('del', KEYS[2]); " + - "redis.call('sadd', KEYS[2], unpack(ARGV, 3, #ARGV)); " + + "if #ARGV > 2 then " + + "redis.call('sadd', KEYS[2], unpack(ARGV, 3, #ARGV)); " + + "end; " + "return members; ", Arrays.asList(getRawName(), setName), params.toArray()); } diff --git a/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java b/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java index 39e180367..f9f24a150 100644 --- a/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonListMultimapTest.java @@ -362,6 +362,12 @@ public class RedissonListMultimapTest extends BaseTest { List allValues = map.getAll(new SimpleKey("0")); assertThat(allValues).containsExactlyElementsOf(values); + + List oldValues2 = map.replaceValues(new SimpleKey("0"), Collections.emptyList()); + assertThat(oldValues2).containsExactlyElementsOf(values); + + List vals = map.getAll(new SimpleKey("0")); + assertThat(vals).isEmpty(); } @Test diff --git a/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java b/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java index d0bc2809f..27158afa8 100644 --- a/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java @@ -429,7 +429,14 @@ public class RedissonSetMultimapTest extends BaseTest { assertThat(oldValues).containsOnly(new SimpleValue("1")); Set allValues = map.getAll(new SimpleKey("0")); - assertThat(allValues).containsOnlyElementsOf(values); + assertThat(allValues).containsExactlyElementsOf(values); + + Set oldValues2 = map.replaceValues(new SimpleKey("0"), Collections.emptyList()); + assertThat(oldValues2).containsExactlyElementsOf(values); + + Set vals = map.getAll(new SimpleKey("0")); + assertThat(vals).isEmpty(); + } @Test