From 1ca20f25bbd4f7da382f571bb97a69b993a7bcea Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 10 Aug 2018 16:58:13 +0300 Subject: [PATCH] Sentinel and Cluster support. Spring Data Redis integration. #1373 --- redisson/pom.xml | 13 + .../client/protocol/RedisCommands.java | 22 ++ .../protocol/convertor/TimeObjectDecoder.java | 1 - .../decoder/TimeLongObjectDecoder.java | 42 +++ .../command/CommandAsyncExecutor.java | 2 + .../redisson/command/CommandAsyncService.java | 11 +- .../main/java/org/redisson/config/Config.java | 4 + .../connection/SentinelConnectionManager.java | 5 + .../connection/RedisClusterNodeDecoder.java | 120 ++++++++ .../connection/RedissonClusterConnection.java | 264 +++++++++++++----- .../data/connection/RedissonConnection.java | 24 +- .../connection/RedissonConnectionFactory.java | 32 ++- .../RedissonSentinelConnection.java | 91 ++++++ .../connection/StringToListConvertor.java | 40 +++ ...ecoder.java => TimeLongObjectDecoder.java} | 3 +- .../data/connection/BaseConnectionTest.java | 22 ++ .../RedissonClusterConnectionTest.java | 222 +++++++++++++++ .../connection/RedissonConnectionTest.java | 26 ++ .../RedissonMultiConnectionTest.java | 45 +++ .../RedissonPipelineConnectionTest.java | 46 +++ .../RedissonSentinelConnectionTest.java | 132 +++++++++ .../connection/RedissonSubscribeTest.java | 54 ++++ 22 files changed, 1131 insertions(+), 90 deletions(-) create mode 100644 redisson/src/main/java/org/redisson/client/protocol/decoder/TimeLongObjectDecoder.java create mode 100644 redisson/src/main/java/org/redisson/spring/data/connection/RedisClusterNodeDecoder.java create mode 100644 redisson/src/main/java/org/redisson/spring/data/connection/RedissonSentinelConnection.java create mode 100644 redisson/src/main/java/org/redisson/spring/data/connection/StringToListConvertor.java rename redisson/src/main/java/org/redisson/spring/data/connection/{TimeObjectDecoder.java => TimeLongObjectDecoder.java} (94%) create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/BaseConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonClusterConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonMultiConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonPipelineConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonSentinelConnectionTest.java create mode 100644 redisson/src/test/java/org/redisson/spring/data/connection/RedissonSubscribeTest.java diff --git a/redisson/pom.xml b/redisson/pom.xml index b9436a987..882074afc 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -267,6 +267,7 @@ provided true + org.springframework.data spring-data-redis @@ -274,6 +275,18 @@ provided true + + org.springframework + spring-jdbc + [3.1,5.0) + test + + + org.mockito + mockito-core + 1.10.19 + test + org.springframework.session spring-session diff --git a/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java b/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java index 5b4476432..5b5aceb0e 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -70,6 +70,8 @@ import org.redisson.client.protocol.decoder.StringMapDataDecoder; import org.redisson.client.protocol.decoder.StringReplayDecoder; import org.redisson.client.protocol.pubsub.PubSubStatusDecoder; import org.redisson.cluster.ClusterNodeInfo; +import org.redisson.spring.data.connection.StringToListConvertor; +import org.redisson.spring.data.connection.TimeLongObjectDecoder; /** * @@ -148,6 +150,7 @@ public interface RedisCommands { RedisCommand PING = new RedisCommand("PING", new ListObjectDecoder(0)); RedisStrictCommand PING_BOOL = new RedisStrictCommand("PING", new BooleanNotNullReplayConvertor()); + RedisStrictCommand SHUTDOWN = new RedisStrictCommand("SHUTDOWN", new VoidReplayConvertor()); RedisStrictCommand UNWATCH = new RedisStrictCommand("UNWATCH", new VoidReplayConvertor()); RedisStrictCommand WATCH = new RedisStrictCommand("WATCH", new VoidReplayConvertor()); RedisStrictCommand MULTI = new RedisStrictCommand("MULTI", new VoidReplayConvertor()); @@ -262,6 +265,11 @@ public interface RedisCommands { RedisStrictCommand CLIENT_GETNAME = new RedisStrictCommand("CLIENT", "GETNAME", new StringDataDecoder()); RedisStrictCommand FLUSHDB = new RedisStrictCommand("FLUSHDB", new VoidReplayConvertor()); RedisStrictCommand FLUSHALL = new RedisStrictCommand("FLUSHALL", new VoidReplayConvertor()); + + RedisStrictCommand SAVE = new RedisStrictCommand("SAVE", new VoidReplayConvertor()); + RedisStrictCommand LASTSAVE = new RedisStrictCommand("LASTSAVE"); + RedisStrictCommand BGSAVE = new RedisStrictCommand("BGSAVE", new VoidReplayConvertor()); + RedisStrictCommand BGREWRITEAOF = new RedisStrictCommand("BGREWRITEAOF", new VoidReplayConvertor()); RedisStrictCommand FLUSHDB_ASYNC = new RedisStrictCommand("FLUSHDB", "ASYNC", new VoidReplayConvertor()); RedisStrictCommand FLUSHALL_ASYNC = new RedisStrictCommand("FLUSHALL", "ASYNC", new VoidReplayConvertor()); @@ -361,10 +369,17 @@ public interface RedisCommands { RedisStrictCommand> CLUSTER_NODES = new RedisStrictCommand>("CLUSTER", "NODES", new ClusterNodesDecoder(false)); RedisStrictCommand> CLUSTER_NODES_SSL = new RedisStrictCommand>("CLUSTER", "NODES", new ClusterNodesDecoder(true)); + RedisStrictCommand TIME_LONG = new RedisStrictCommand("TIME", new TimeLongObjectDecoder()); RedisStrictCommand