diff --git a/src/main/java/org/redisson/RedissonKeys.java b/src/main/java/org/redisson/RedissonKeys.java index f4b7ed645..73df92715 100644 --- a/src/main/java/org/redisson/RedissonKeys.java +++ b/src/main/java/org/redisson/RedissonKeys.java @@ -257,5 +257,25 @@ public class RedissonKeys implements RKeys { }, (Object[])keys); } + @Override + public Long сount() { + return commandExecutor.get(countAsync()); + } + + @Override + public Future countAsync() { + return commandExecutor.readAllAsync(RedisCommands.DBSIZE, new SlotCallback() { + AtomicLong results = new AtomicLong(); + @Override + public void onSlotResult(Long result) { + results.addAndGet(result); + } + + @Override + public Long onFinish() { + return results.get(); + } + }); + } } diff --git a/src/main/java/org/redisson/client/protocol/RedisCommands.java b/src/main/java/org/redisson/client/protocol/RedisCommands.java index d72d1ae8b..6af6afc73 100644 --- a/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -187,6 +187,7 @@ public interface RedisCommands { RedisCommand HDEL = new RedisStrictCommand("HDEL", 2, ValueType.MAP_KEY); RedisStrictCommand DEL = new RedisStrictCommand("DEL"); + RedisStrictCommand DBSIZE = new RedisStrictCommand("DBSIZE"); RedisStrictCommand DEL_SINGLE = new RedisStrictCommand("DEL", new BooleanReplayConvertor()); RedisStrictCommand DEL_VOID = new RedisStrictCommand("DEL", new VoidReplayConvertor()); diff --git a/src/main/java/org/redisson/command/CommandAsyncExecutor.java b/src/main/java/org/redisson/command/CommandAsyncExecutor.java index 5f17a7baf..b63ca25b8 100644 --- a/src/main/java/org/redisson/command/CommandAsyncExecutor.java +++ b/src/main/java/org/redisson/command/CommandAsyncExecutor.java @@ -45,6 +45,8 @@ public interface CommandAsyncExecutor { Future writeAllAsync(RedisCommand command, SlotCallback callback, Object ... params); + Future readAllAsync(RedisCommand command, SlotCallback callback, Object ... params); + Future evalReadAsync(InetSocketAddress client, String key, Codec codec, RedisCommand evalCommandType, String script, List keys, Object ... params); Future evalReadAsync(String key, Codec codec, RedisCommand evalCommandType, String script, List keys, Object ... params); diff --git a/src/main/java/org/redisson/command/CommandAsyncService.java b/src/main/java/org/redisson/command/CommandAsyncService.java index 3f2a1c2a1..d0b2fa106 100644 --- a/src/main/java/org/redisson/command/CommandAsyncService.java +++ b/src/main/java/org/redisson/command/CommandAsyncService.java @@ -176,6 +176,11 @@ public class CommandAsyncService implements CommandAsyncExecutor { return allAsync(false, command, callback, params); } + @Override + public Future readAllAsync(RedisCommand command, SlotCallback callback, Object ... params) { + return allAsync(true, command, callback, params); + } + public Future allAsync(boolean readOnlyMode, RedisCommand command, final SlotCallback callback, Object ... params) { final Promise mainPromise = connectionManager.newPromise(); Promise promise = new DefaultPromise() { diff --git a/src/main/java/org/redisson/core/RKeys.java b/src/main/java/org/redisson/core/RKeys.java index 8b8d82f30..43438b3a8 100644 --- a/src/main/java/org/redisson/core/RKeys.java +++ b/src/main/java/org/redisson/core/RKeys.java @@ -88,4 +88,11 @@ public interface RKeys extends RKeysAsync { */ long delete(String ... keys); + /** + * Returns the number of keys in the currently-selected database + * + * @return + */ + Long сount(); + } diff --git a/src/main/java/org/redisson/core/RKeysAsync.java b/src/main/java/org/redisson/core/RKeysAsync.java index 18f3b3e82..b57633d76 100644 --- a/src/main/java/org/redisson/core/RKeysAsync.java +++ b/src/main/java/org/redisson/core/RKeysAsync.java @@ -71,4 +71,10 @@ public interface RKeysAsync { */ Future deleteAsync(String ... keys); + /** + * Returns the number of keys in the currently-selected database in async mode + * + * @return + */ + Future countAsync(); }