diff --git a/redisson/src/main/java/org/redisson/RedissonMapCache.java b/redisson/src/main/java/org/redisson/RedissonMapCache.java index 96e731351..11ee75021 100644 --- a/redisson/src/main/java/org/redisson/RedissonMapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonMapCache.java @@ -1694,16 +1694,20 @@ public class RedissonMapCache extends RedissonMap implements RMapCac params.toArray()); } + private Boolean isWindows; + @Override public int addListener(final MapEntryListener listener) { if (listener == null) { throw new NullPointerException(); } - RFuture> serverFuture = commandExecutor.readAsync((String)null, StringCodec.INSTANCE, RedisCommands.INFO_SERVER); - serverFuture.syncUninterruptibly(); - String os = serverFuture.getNow().get("os"); - boolean isWindows = os.contains("Windows"); + if (isWindows == null) { + RFuture> serverFuture = commandExecutor.readAsync((String)null, StringCodec.INSTANCE, RedisCommands.INFO_SERVER); + serverFuture.syncUninterruptibly(); + String os = serverFuture.getNow().get("os"); + isWindows = os.contains("Windows"); + } if (listener instanceof EntryRemovedListener) { RTopic> topic = redisson.getTopic(getRemovedChannelName(), new MapCacheEventCodec(codec, isWindows));