diff --git a/src/main/java/org/springframework/data/redis/support/collections/DefaultRedisMap.java b/src/main/java/org/springframework/data/redis/support/collections/DefaultRedisMap.java index 39edb7e084..161d6bcfb6 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/DefaultRedisMap.java +++ b/src/main/java/org/springframework/data/redis/support/collections/DefaultRedisMap.java @@ -38,6 +38,7 @@ * * @author Costin Leau * @author Christoph Strobl + * @author Christian Bühler */ public class DefaultRedisMap implements RedisMap { @@ -156,19 +157,9 @@ public boolean containsValue(Object value) { @Override public Set> entrySet() { - Set keySet = keySet(); - checkResult(keySet); - Collection multiGet = hashOps.multiGet(keySet); - - Iterator keys = keySet.iterator(); - Iterator values = multiGet.iterator(); - - Set> entries = new LinkedHashSet<>(); - while (keys.hasNext()) { - entries.add(new DefaultRedisMapEntry(keys.next(), values.next())); - } - - return entries; + Map entries = hashOps.entries(); + checkResult(entries); + return entries.entrySet(); } /* diff --git a/src/test/java/org/springframework/data/redis/support/collections/AbstractRedisMapTests.java b/src/test/java/org/springframework/data/redis/support/collections/AbstractRedisMapTests.java index 424651b059..e1a9ce5591 100644 --- a/src/test/java/org/springframework/data/redis/support/collections/AbstractRedisMapTests.java +++ b/src/test/java/org/springframework/data/redis/support/collections/AbstractRedisMapTests.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -62,6 +63,7 @@ * @author Jennifer Hickey * @author Christoph Strobl * @author Thomas Darimont + * @author Christian Bühler */ @RunWith(Parameterized.class) public abstract class AbstractRedisMapTests { @@ -396,6 +398,27 @@ public void testEntrySet() { assertThat(values, not(hasItem(v2))); } + @Test // DATAREDIS-803 + @IfProfileValue(name = "runLongTests", value = "true") + public void testBigEntrySet() { + + Set> entries = map.entrySet(); + assertTrue(entries.isEmpty()); + + for (int j = 0; j < 2; j++) { + Map m = new HashMap<>(); + for (int i = 0; i < 1024 * 1024 / 2 - 1; i++) { + m.put(getKey(), getValue()); + } + map.putAll(m); + } + map.put(getKey(), getValue()); + + entries = map.entrySet(); + + assertEquals(1024 * 1024 - 1, entries.size()); + } + @Test public void testPutIfAbsent() {