diff --git a/redisson-spring-data/redisson-spring-data-16/src/test/java/org/redisson/RedissonRuntimeEnvironment.java b/redisson-spring-data/redisson-spring-data-16/src/test/java/org/redisson/RedissonRuntimeEnvironment.java index c26aa3560..6d426c601 100644 --- a/redisson-spring-data/redisson-spring-data-16/src/test/java/org/redisson/RedissonRuntimeEnvironment.java +++ b/redisson-spring-data/redisson-spring-data-16/src/test/java/org/redisson/RedissonRuntimeEnvironment.java @@ -9,7 +9,7 @@ import java.util.Locale; public class RedissonRuntimeEnvironment { public static final boolean isTravis = "true".equalsIgnoreCase(System.getProperty("travisEnv")); - public static final String redisBinaryPath = System.getProperty("redisBinary", "C:\\Devel\\projects\\redis\\Redis-x64-3.2.100\\redis-server.exe"); + public static final String redisBinaryPath = System.getProperty("redisBinary", "C:\\redis\\redis-server.exe"); public static final String tempDir = System.getProperty("java.io.tmpdir"); public static final String OS; public static final boolean isWindows; diff --git a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index c782b0c57..3acca2171 100644 --- a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -27,6 +27,7 @@ import org.redisson.client.protocol.RedisCommands; import org.redisson.client.protocol.RedisStrictCommand; import org.redisson.client.protocol.decoder.ObjectDecoder; import org.redisson.client.protocol.decoder.ObjectListReplayDecoder; +import org.redisson.client.protocol.decoder.StringListReplayDecoder; import org.redisson.client.protocol.decoder.StringMapDataDecoder; import org.redisson.command.CommandBatchService; import org.redisson.connection.MasterSlaveEntry; @@ -309,15 +310,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Red return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/RedissonRuntimeEnvironment.java b/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/RedissonRuntimeEnvironment.java index c26aa3560..dd6a5c428 100644 --- a/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/RedissonRuntimeEnvironment.java +++ b/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/RedissonRuntimeEnvironment.java @@ -9,7 +9,7 @@ import java.util.Locale; public class RedissonRuntimeEnvironment { public static final boolean isTravis = "true".equalsIgnoreCase(System.getProperty("travisEnv")); - public static final String redisBinaryPath = System.getProperty("redisBinary", "C:\\Devel\\projects\\redis\\Redis-x64-3.2.100\\redis-server.exe"); + public static final String redisBinaryPath = System.getProperty("redisBinary", "C:\\Redis\\redis-server.exe"); public static final String tempDir = System.getProperty("java.io.tmpdir"); public static final String OS; public static final boolean isWindows; diff --git a/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/spring/data/connection/RedissonClusterConnectionTest.java b/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/spring/data/connection/RedissonClusterConnectionTest.java index d1403541e..cc4499cf3 100644 --- a/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/spring/data/connection/RedissonClusterConnectionTest.java +++ b/redisson-spring-data/redisson-spring-data-17/src/test/java/org/redisson/spring/data/connection/RedissonClusterConnectionTest.java @@ -13,7 +13,6 @@ import org.redisson.config.Config; import org.redisson.config.SubscriptionMode; import org.redisson.connection.MasterSlaveConnectionManager; import org.redisson.connection.balancer.RandomLoadBalancer; -import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.data.redis.connection.ClusterInfo; import org.springframework.data.redis.connection.RedisClusterNode; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -21,17 +20,17 @@ import org.springframework.data.redis.connection.RedisNode.NodeType; import org.springframework.data.redis.core.types.RedisClientInfo; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.*; -import static org.assertj.core.api.Assertions.*; -import static org.redisson.connection.MasterSlaveConnectionManager.MAX_SLOT; +import static org.assertj.core.api.Assertions.assertThat; public class RedissonClusterConnectionTest { static RedissonClient redisson; static RedissonClusterConnection connection; static ClusterProcesses process; - + @BeforeClass public static void before() throws FailedToStartRedisException, IOException, InterruptedException { RedisRunner master1 = new RedisRunner().randomPort().randomDir().nosave(); @@ -108,6 +107,16 @@ public class RedissonClusterConnectionTest { Integer slot = connection.clusterGetSlotForKey("123".getBytes()); assertThat(slot).isNotNull(); } + + @Test + public void testKeys() { + RedisClusterNode node1 = connection.clusterGetNodeForSlot(1); + for (int i = 0; i < 1000; i++) { + connection.set(("test" + i).getBytes(), ("" + i).getBytes()); + } + Set keys = connection.keys(node1, "test*".getBytes(StandardCharsets.UTF_8)); + assertThat(keys).hasSize(342); + } @Test public void testClusterGetNodeForSlot() { diff --git a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 21a2f974b..519f5658c 100644 --- a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -309,15 +309,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Red return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index d50dea78c..731c1b834 100644 --- a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -310,15 +310,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Red return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-25/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-25/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-25/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-25/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson-spring-data/redisson-spring-data-26/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java b/redisson-spring-data/redisson-spring-data-26/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java index 3ba471134..f61e0d214 100644 --- a/redisson-spring-data/redisson-spring-data-26/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java +++ b/redisson-spring-data/redisson-spring-data-26/src/main/java/org/redisson/spring/data/connection/RedissonClusterConnection.java @@ -316,15 +316,14 @@ public class RedissonClusterConnection extends RedissonConnection implements Def return result; } + private final RedisStrictCommand> KEYS = new RedisStrictCommand<>("KEYS"); + @Override public Set keys(RedisClusterNode node, byte[] pattern) { - RFuture> f = executorService.readAllAsync(RedisCommands.KEYS, pattern); - Collection keys = syncFuture(f); - Set result = new HashSet(); - for (String key : keys) { - result.add(key.getBytes(CharsetUtil.UTF_8)); - } - return result; + MasterSlaveEntry entry = getEntry(node); + RFuture> f = executorService.readAsync(entry, ByteArrayCodec.INSTANCE, KEYS, pattern); + Collection keys = syncFuture(f); + return new HashSet<>(keys); } @Override diff --git a/redisson/src/main/java/org/redisson/client/protocol/RedisCommand.java b/redisson/src/main/java/org/redisson/client/protocol/RedisCommand.java index 1dab9153d..baa496c95 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/RedisCommand.java +++ b/redisson/src/main/java/org/redisson/client/protocol/RedisCommand.java @@ -87,7 +87,7 @@ public class RedisCommand { if (replayMultiDecoder != null) { this.replayMultiDecoder = replayMultiDecoder; } else { - this.replayMultiDecoder = (parts, state) -> null; + this.replayMultiDecoder = (parts, state) -> (R) parts; } } diff --git a/redisson/src/main/java/org/redisson/command/CommandAsyncExecutor.java b/redisson/src/main/java/org/redisson/command/CommandAsyncExecutor.java index c811d0443..d2f08a7d6 100644 --- a/redisson/src/main/java/org/redisson/command/CommandAsyncExecutor.java +++ b/redisson/src/main/java/org/redisson/command/CommandAsyncExecutor.java @@ -97,8 +97,6 @@ public interface CommandAsyncExecutor { RFuture writeAsync(String key, Codec codec, RedisCommand command, Object... params); - RFuture> readAllAsync(RedisCommand command, Object... params); - RFuture writeAllAsync(RedisCommand command, Object... params); RFuture writeAsync(String key, RedisCommand command, Object... params); diff --git a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java index c42e92d76..906c555dc 100644 --- a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java +++ b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java @@ -187,11 +187,6 @@ public class CommandAsyncService implements CommandAsyncExecutor { return async(true, new NodeSource(client), codec, command, params, false, false); } - @Override - public RFuture> readAllAsync(RedisCommand command, Object... params) { - return readAllAsync(connectionManager.getCodec(), command, params); - } - @Override public RFuture> readAllAsync(Codec codec, RedisCommand command, Object... params) { Collection nodes = connectionManager.getEntrySet();