From 3b9ddc6ecf6dfb4660820b44082a8008cf429185 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 21 Feb 2020 11:58:50 +0300 Subject: [PATCH] Feature - add SWAPDB command support #2606 --- .../main/java/org/redisson/RedissonKeys.java | 9 ++++ .../src/main/java/org/redisson/api/RKeys.java | 5 ++ .../java/org/redisson/api/RKeysAsync.java | 11 +++++ .../java/org/redisson/api/RKeysReactive.java | 49 ++++++++++++------- .../main/java/org/redisson/api/RKeysRx.java | 29 +++++++++++ .../client/protocol/RedisCommands.java | 1 + 6 files changed, 86 insertions(+), 18 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonKeys.java b/redisson/src/main/java/org/redisson/RedissonKeys.java index 8d407299d..6b408ba0d 100644 --- a/redisson/src/main/java/org/redisson/RedissonKeys.java +++ b/redisson/src/main/java/org/redisson/RedissonKeys.java @@ -519,4 +519,13 @@ public class RedissonKeys implements RKeys { return toStream(getKeys(count).iterator()); } + @Override + public void swapdb(int db1, int db2) { + commandExecutor.get(swapdbAsync(db1, db2)); + } + + @Override + public RFuture swapdbAsync(int db1, int db2) { + return commandExecutor.writeAsync(null, RedisCommands.SWAPDB, db1, db2); + } } diff --git a/redisson/src/main/java/org/redisson/api/RKeys.java b/redisson/src/main/java/org/redisson/api/RKeys.java index abc70f08b..7c833ade6 100644 --- a/redisson/src/main/java/org/redisson/api/RKeys.java +++ b/redisson/src/main/java/org/redisson/api/RKeys.java @@ -311,6 +311,11 @@ public interface RKeys extends RKeysAsync { */ long count(); + /** + * Swap two databases. + */ + void swapdb(int db1, int db2); + /** * Delete all keys of currently selected database */ diff --git a/redisson/src/main/java/org/redisson/api/RKeysAsync.java b/redisson/src/main/java/org/redisson/api/RKeysAsync.java index f2865a5ef..acb6611d3 100644 --- a/redisson/src/main/java/org/redisson/api/RKeysAsync.java +++ b/redisson/src/main/java/org/redisson/api/RKeysAsync.java @@ -206,14 +206,25 @@ public interface RKeysAsync { */ RFuture countAsync(); + /** + * Swap two databases. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + RFuture swapdbAsync(int db1, int db2); + /** * Delete all keys of currently selected database + * * @return void */ RFuture flushdbAsync(); /** * Delete all keys of all existing databases + * * @return void */ RFuture flushallAsync(); diff --git a/redisson/src/main/java/org/redisson/api/RKeysReactive.java b/redisson/src/main/java/org/redisson/api/RKeysReactive.java index 0eb630f71..628192850 100644 --- a/redisson/src/main/java/org/redisson/api/RKeysReactive.java +++ b/redisson/src/main/java/org/redisson/api/RKeysReactive.java @@ -15,12 +15,11 @@ */ package org.redisson.api; -import java.util.Collection; -import java.util.concurrent.TimeUnit; - import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import java.util.concurrent.TimeUnit; + /** * * @author Nikita Koksharov @@ -207,21 +206,6 @@ public interface RKeysReactive { */ Mono getSlot(String key); - /** - * Find keys by key search pattern by one Redis call. - * - * Uses KEYS Redis command. - * - * Supported glob-style patterns: - * h?llo subscribes to hello, hallo and hxllo - * h*llo subscribes to hllo and heeeello - * h[ae]llo subscribes to hello and hallo, but not hillo - * - * @param pattern - match pattern - * @return collection of keys - */ - Mono> findKeysByPattern(String pattern); - /** * Get random key * @@ -283,6 +267,15 @@ public interface RKeysReactive { */ Mono flushdb(); + /** + * Swap two databases. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Mono swapdb(int db1, int db2); + /** * Delete all the keys of all the existing databases * @@ -292,4 +285,24 @@ public interface RKeysReactive { */ Mono flushall(); + /** + * Delete all keys of currently selected database + * in background without blocking server. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Mono flushdbParallel(); + + /** + * Delete all keys of all existing databases + * in background without blocking server. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Mono flushallParallel(); + } diff --git a/redisson/src/main/java/org/redisson/api/RKeysRx.java b/redisson/src/main/java/org/redisson/api/RKeysRx.java index bdccd3b6c..1e16b9b79 100644 --- a/redisson/src/main/java/org/redisson/api/RKeysRx.java +++ b/redisson/src/main/java/org/redisson/api/RKeysRx.java @@ -269,6 +269,15 @@ public interface RKeysRx { */ Completable flushdb(); + /** + * Swap two databases. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Completable swapdb(int db1, int db2); + /** * Delete all the keys of all the existing databases * @@ -278,4 +287,24 @@ public interface RKeysRx { */ Completable flushall(); + /** + * Delete all keys of currently selected database + * in background without blocking server. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Completable flushdbParallel(); + + /** + * Delete all keys of all existing databases + * in background without blocking server. + *

+ * Requires Redis 4.0+ + * + * @return void + */ + Completable flushallParallel(); + } 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 e19500225..eeb5d1b1a 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -275,6 +275,7 @@ public interface RedisCommands { RedisStrictCommand CLIENT_SETNAME = new RedisStrictCommand("CLIENT", "SETNAME", new VoidReplayConvertor()); RedisStrictCommand CLIENT_GETNAME = new RedisStrictCommand("CLIENT", "GETNAME", new StringDataDecoder()); RedisStrictCommand FLUSHDB = new RedisStrictCommand("FLUSHDB", new VoidReplayConvertor()); + RedisStrictCommand SWAPDB = new RedisStrictCommand("SWAPDB", new VoidReplayConvertor()); RedisStrictCommand FLUSHALL = new RedisStrictCommand("FLUSHALL", new VoidReplayConvertor()); RedisStrictCommand SAVE = new RedisStrictCommand("SAVE", new VoidReplayConvertor());