diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java index 16cdff6ab..54f48c3da 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java @@ -16,7 +16,7 @@ package org.redisson.client.protocol.decoder; import java.io.IOException; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -25,6 +25,11 @@ import org.redisson.client.handler.State; import io.netty.buffer.ByteBuf; +/** + * + * @author Nikita Koksharov + * + */ public class ObjectMapDecoder implements MultiDecoder> { private Codec codec; @@ -46,7 +51,7 @@ public class ObjectMapDecoder implements MultiDecoder> { @Override public Map decode(List parts, State state) { - Map result = new HashMap(parts.size()/2); + Map result = new LinkedHashMap(parts.size()/2); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1), parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java index 6054602f6..3689aaaa0 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java @@ -15,7 +15,6 @@ */ package org.redisson.client.protocol.decoder; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java b/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java index 1e64420ca..605b02aa5 100644 --- a/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java +++ b/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java @@ -7,6 +7,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentMap; @@ -17,6 +18,7 @@ import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; import org.redisson.api.RFuture; +import org.redisson.api.RMap; import org.redisson.api.RMapCache; import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.MsgPackJacksonCodec; @@ -127,6 +129,37 @@ public class RedissonMapCacheTest extends BaseTest { } + @Test + public void testOrdering() { + Map map = new LinkedHashMap(); + + // General player data + map.put("name", "123"); + map.put("ip", "4124"); + map.put("rank", "none"); + map.put("tokens", "0"); + map.put("coins", "0"); + + // Arsenal player statistics + map.put("ar_score", "0"); + map.put("ar_gameswon", "0"); + map.put("ar_gameslost", "0"); + map.put("ar_kills", "0"); + map.put("ar_deaths", "0"); + + RMap rmap = redisson.getMapCache("123"); + rmap.putAll(map); + + assertThat(rmap.keySet()).containsExactlyElementsOf(map.keySet()); + assertThat(rmap.readAllKeySet()).containsExactlyElementsOf(map.keySet()); + + assertThat(rmap.values()).containsExactlyElementsOf(map.values()); + assertThat(rmap.readAllValues()).containsExactlyElementsOf(map.values()); + + assertThat(rmap.entrySet()).containsExactlyElementsOf(map.entrySet()); + assertThat(rmap.readAllEntrySet()).containsExactlyElementsOf(map.entrySet()); + } + @Test public void testCacheValues() { final RMapCache map = redisson.getMapCache("testRMapCacheValues");