diff --git a/redisson/src/main/java/org/redisson/RedissonMapCache.java b/redisson/src/main/java/org/redisson/RedissonMapCache.java
index 546082ce8..353be86c0 100644
--- a/redisson/src/main/java/org/redisson/RedissonMapCache.java
+++ b/redisson/src/main/java/org/redisson/RedissonMapCache.java
@@ -51,6 +51,10 @@ import org.redisson.eviction.EvictionScheduler;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.FutureListener;
+import java.io.IOException;
+import java.math.BigDecimal;
+import org.redisson.client.codec.StringCodec;
+import org.redisson.client.protocol.convertor.NumberConvertor;
/**
*
Map-based cache with ability to set TTL for each entry via
@@ -364,7 +368,7 @@ public class RedissonMapCache extends RedissonMap implements RMapCac
return commandExecutor.evalWriteAsync(getName(key), codec, EVAL_PUT,
"local value = struct.pack('dLc0', 0, string.len(ARGV[2]), ARGV[2]); "
+ "if redis.call('hsetnx', KEYS[1], ARGV[1], value) == 1 then "
- + "return nil "
+ + "return nil;"
+ "else "
+ "local v = redis.call('hget', KEYS[1], ARGV[1]); "
+ "if v == false then "
@@ -376,6 +380,56 @@ public class RedissonMapCache extends RedissonMap implements RMapCac
Collections.