diff --git a/README.md b/README.md index ba56e5f41..8a1151acd 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,8 @@ RExecutorService executor = redisson.getExecutorService("myExecutorService"); ``` +Please consider __[Redisson PRO](https://redisson.pro)__ version for advanced features and support by SLA. + Downloads =============================== diff --git a/redisson/src/main/java/org/redisson/Redisson.java b/redisson/src/main/java/org/redisson/Redisson.java index b3495a38f..5d4686506 100755 --- a/redisson/src/main/java/org/redisson/Redisson.java +++ b/redisson/src/main/java/org/redisson/Redisson.java @@ -416,6 +416,11 @@ public class Redisson implements RedissonClient { public RScript getScript() { return new RedissonScript(connectionManager.getCommandExecutor()); } + + @Override + public RScript getScript(Codec codec) { + return new RedissonScript(connectionManager.getCommandExecutor(), codec); + } @Override public RScheduledExecutorService getExecutorService(String name) { diff --git a/redisson/src/main/java/org/redisson/RedissonBatch.java b/redisson/src/main/java/org/redisson/RedissonBatch.java index 440aa7d72..6f47de884 100644 --- a/redisson/src/main/java/org/redisson/RedissonBatch.java +++ b/redisson/src/main/java/org/redisson/RedissonBatch.java @@ -39,6 +39,7 @@ import org.redisson.api.RMultimapAsync; import org.redisson.api.RMultimapCacheAsync; import org.redisson.api.RQueueAsync; import org.redisson.api.RScoredSortedSetAsync; +import org.redisson.api.RScript; import org.redisson.api.RScriptAsync; import org.redisson.api.RSetAsync; import org.redisson.api.RSetCacheAsync; @@ -211,6 +212,11 @@ public class RedissonBatch implements RBatch { public RScriptAsync getScript() { return new RedissonScript(executorService); } + + @Override + public RScript getScript(Codec codec) { + return new RedissonScript(executorService, codec); + } @Override public RKeysAsync getKeys() { diff --git a/redisson/src/main/java/org/redisson/RedissonReactive.java b/redisson/src/main/java/org/redisson/RedissonReactive.java index 4dcafa55d..5018b0807 100644 --- a/redisson/src/main/java/org/redisson/RedissonReactive.java +++ b/redisson/src/main/java/org/redisson/RedissonReactive.java @@ -382,6 +382,11 @@ public class RedissonReactive implements RedissonReactiveClient { public RScriptReactive getScript() { return ReactiveProxyBuilder.create(commandExecutor, new RedissonScript(commandExecutor), RScriptReactive.class); } + + @Override + public RScriptReactive getScript(Codec codec) { + return ReactiveProxyBuilder.create(commandExecutor, new RedissonScript(commandExecutor, codec), RScriptReactive.class); + } @Override public RBatchReactive createBatch(BatchOptions options) { diff --git a/redisson/src/main/java/org/redisson/RedissonRx.java b/redisson/src/main/java/org/redisson/RedissonRx.java index c9723835a..42e3d02ec 100644 --- a/redisson/src/main/java/org/redisson/RedissonRx.java +++ b/redisson/src/main/java/org/redisson/RedissonRx.java @@ -373,6 +373,11 @@ public class RedissonRx implements RedissonRxClient { public RScriptRx getScript() { return RxProxyBuilder.create(commandExecutor, new RedissonScript(commandExecutor), RScriptRx.class); } + + @Override + public RScriptRx getScript(Codec codec) { + return RxProxyBuilder.create(commandExecutor, new RedissonScript(commandExecutor, codec), RScriptRx.class); + } @Override public RBatchRx createBatch(BatchOptions options) { diff --git a/redisson/src/main/java/org/redisson/RedissonScript.java b/redisson/src/main/java/org/redisson/RedissonScript.java index f0bbe76fb..ab1e0a077 100644 --- a/redisson/src/main/java/org/redisson/RedissonScript.java +++ b/redisson/src/main/java/org/redisson/RedissonScript.java @@ -39,10 +39,17 @@ import io.netty.buffer.ByteBuf; */ public class RedissonScript implements RScript { + private final Codec codec; private final CommandAsyncExecutor commandExecutor; public RedissonScript(CommandAsyncExecutor commandExecutor) { this.commandExecutor = commandExecutor; + this.codec = commandExecutor.getConnectionManager().getCodec(); + } + + public RedissonScript(CommandAsyncExecutor commandExecutor, Codec codec) { + this.commandExecutor = commandExecutor; + this.codec = codec; } @Override @@ -70,88 +77,68 @@ public class RedissonScript implements RScript { }, luaScript); } + @Override public RFuture scriptLoadAsync(String key, String luaScript) { return commandExecutor.writeAsync(key, RedisCommands.SCRIPT_LOAD, luaScript); } @Override public R eval(Mode mode, String luaScript, ReturnType returnType) { - return eval(null, mode, commandExecutor.getConnectionManager().getCodec(), luaScript, returnType); + return eval(mode, luaScript, returnType, Collections.emptyList()); } @Override public R eval(Mode mode, Codec codec, String luaScript, ReturnType returnType) { - return eval(null, mode, codec, luaScript, returnType); - } - - - public R eval(String key, Mode mode, Codec codec, String luaScript, ReturnType returnType) { - return eval(key, mode, codec, luaScript, returnType, Collections.emptyList()); + RedissonScript script = new RedissonScript(commandExecutor, codec); + return script.eval(mode, luaScript, returnType); } @Override public R eval(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values) { - return eval(null, mode, commandExecutor.getConnectionManager().getCodec(), luaScript, returnType, keys, values); + return eval(null, mode, luaScript, returnType, keys, values); } @Override public R eval(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values) { - return eval(null, mode, codec, luaScript, returnType, keys, values); - } - - public R eval(String key, Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values) { - return (R) commandExecutor.get(evalAsync(key, mode, codec, luaScript, returnType, keys, values)); + RedissonScript script = new RedissonScript(commandExecutor, codec); + return script.eval(mode, luaScript, returnType, keys, values); } @Override public RFuture evalAsync(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values) { - return evalAsync(null, mode, commandExecutor.getConnectionManager().getCodec(), luaScript, returnType, keys, values); + return evalAsync(null, mode, luaScript, returnType, keys, values); } @Override public RFuture evalAsync(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values) { - return evalAsync(null, mode, codec, luaScript, returnType, keys, values); + RedissonScript script = new RedissonScript(commandExecutor, codec); + return script.evalAsync(mode, luaScript, returnType, keys, values); } @Override public RFuture evalAsync(String key, Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values) { - if (mode == Mode.READ_ONLY) { - return commandExecutor.evalReadAsync(key, codec, returnType.getCommand(), luaScript, keys, encode(Arrays.asList(values), codec).toArray()); - } - return commandExecutor.evalWriteAsync(key, codec, returnType.getCommand(), luaScript, keys, encode(Arrays.asList(values), codec).toArray()); + RedissonScript script = new RedissonScript(commandExecutor, codec); + return script.evalAsync(key, mode, luaScript, returnType, keys, values); } @Override public R evalSha(Mode mode, String shaDigest, ReturnType returnType) { - return evalSha(null, mode, commandExecutor.getConnectionManager().getCodec(), shaDigest, returnType); + return evalSha(null, mode, shaDigest, returnType, Collections.emptyList()); } @Override public R evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType) { - return evalSha(null, mode, codec, shaDigest, returnType); - } - - public R evalSha(String key, Mode mode, String shaDigest, ReturnType returnType) { - return evalSha(key, mode, commandExecutor.getConnectionManager().getCodec(), shaDigest, returnType, Collections.emptyList()); + return evalSha(mode, codec, shaDigest, returnType, Collections.emptyList()); } - public R evalSha(String key, Mode mode, Codec codec, String shaDigest, ReturnType returnType) { - return evalSha(key, mode, codec, shaDigest, returnType, Collections.emptyList()); - } - - @Override public R evalSha(Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values) { - return evalSha(null, mode, commandExecutor.getConnectionManager().getCodec(), shaDigest, returnType, keys, values); + return evalSha(null, mode, shaDigest, returnType, keys, values); } @Override public R evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values) { - return evalSha(null, mode, codec, shaDigest, returnType, keys, values); - } - - public R evalSha(String key, Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values) { - return (R) commandExecutor.get(evalShaAsync(key, mode, codec, shaDigest, returnType, keys, values)); + return (R) commandExecutor.get(evalShaAsync(null, mode, codec, shaDigest, returnType, keys, values)); } @Override @@ -165,11 +152,8 @@ public class RedissonScript implements RScript { } public RFuture evalShaAsync(String key, Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values) { - RedisCommand command = new RedisCommand(returnType.getCommand(), "EVALSHA"); - if (mode == Mode.READ_ONLY) { - return commandExecutor.evalReadAsync(key, codec, command, shaDigest, keys, encode(Arrays.asList(values), codec).toArray()); - } - return commandExecutor.evalWriteAsync(key, codec, command, shaDigest, keys, encode(Arrays.asList(values), codec).toArray()); + RedissonScript script = new RedissonScript(commandExecutor, codec); + return script.evalShaAsync(key, mode, shaDigest, returnType, keys, values); } @Override @@ -238,7 +222,6 @@ public class RedissonScript implements RScript { return commandExecutor.writeAllAsync(RedisCommands.SCRIPT_FLUSH); } -// @Override public RFuture scriptFlushAsync(String key) { return commandExecutor.writeAsync(key, RedisCommands.SCRIPT_FLUSH); } @@ -286,4 +269,35 @@ public class RedissonScript implements RScript { } } + @Override + public RFuture evalShaAsync(String key, Mode mode, String shaDigest, ReturnType returnType, + List keys, Object... values) { + RedisCommand command = new RedisCommand(returnType.getCommand(), "EVALSHA"); + if (mode == Mode.READ_ONLY) { + return commandExecutor.evalReadAsync(key, codec, command, shaDigest, keys, encode(Arrays.asList(values), codec).toArray()); + } + return commandExecutor.evalWriteAsync(key, codec, command, shaDigest, keys, encode(Arrays.asList(values), codec).toArray()); + } + + @Override + public RFuture evalAsync(String key, Mode mode, String luaScript, ReturnType returnType, List keys, + Object... values) { + if (mode == Mode.READ_ONLY) { + return commandExecutor.evalReadAsync(key, codec, returnType.getCommand(), luaScript, keys, encode(Arrays.asList(values), codec).toArray()); + } + return commandExecutor.evalWriteAsync(key, codec, returnType.getCommand(), luaScript, keys, encode(Arrays.asList(values), codec).toArray()); + } + + @Override + public R evalSha(String key, Mode mode, String shaDigest, ReturnType returnType, List keys, + Object... values) { + return commandExecutor.get((RFuture)evalShaAsync(key, mode, shaDigest, returnType, keys, values)); + } + + @Override + public R eval(String key, Mode mode, String luaScript, ReturnType returnType, List keys, + Object... values) { + return commandExecutor.get((RFuture)evalAsync(key, mode, luaScript, returnType, keys, values)); + } + } diff --git a/redisson/src/main/java/org/redisson/api/RBatch.java b/redisson/src/main/java/org/redisson/api/RBatch.java index 5c918c5d1..1690913df 100644 --- a/redisson/src/main/java/org/redisson/api/RBatch.java +++ b/redisson/src/main/java/org/redisson/api/RBatch.java @@ -393,6 +393,14 @@ public interface RBatch { */ RScriptAsync getScript(); + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScript getScript(Codec codec); + /** * Returns keys operations. * Each of Redis/Redisson object associated with own key diff --git a/redisson/src/main/java/org/redisson/api/RBatchReactive.java b/redisson/src/main/java/org/redisson/api/RBatchReactive.java index 1d743585b..919c61610 100644 --- a/redisson/src/main/java/org/redisson/api/RBatchReactive.java +++ b/redisson/src/main/java/org/redisson/api/RBatchReactive.java @@ -341,6 +341,14 @@ public interface RBatchReactive { */ RScriptReactive getScript(); + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScriptReactive getScript(Codec codec); + /** * Returns keys operations. * Each of Redis/Redisson object associated with own key diff --git a/redisson/src/main/java/org/redisson/api/RBatchRx.java b/redisson/src/main/java/org/redisson/api/RBatchRx.java index bd01a6c0f..e44c072d3 100644 --- a/redisson/src/main/java/org/redisson/api/RBatchRx.java +++ b/redisson/src/main/java/org/redisson/api/RBatchRx.java @@ -342,6 +342,14 @@ public interface RBatchRx { */ RScriptRx getScript(); + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScriptRx getScript(Codec codec); + /** * Returns keys operations. * Each of Redis/Redisson object associated with own key diff --git a/redisson/src/main/java/org/redisson/api/RScript.java b/redisson/src/main/java/org/redisson/api/RScript.java index caa3611b7..88ebbfa99 100644 --- a/redisson/src/main/java/org/redisson/api/RScript.java +++ b/redisson/src/main/java/org/redisson/api/RScript.java @@ -22,6 +22,7 @@ import org.redisson.client.protocol.RedisCommand; import org.redisson.client.protocol.RedisCommands; /** + * Interface for Redis Script feature * * @author Nikita Koksharov * @@ -51,28 +52,132 @@ public interface RScript extends RScriptAsync { }; + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ R evalSha(Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + R evalSha(String key, Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); + + /* + * Use getScript(Codec) instead + */ + @Deprecated R evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @return result object + */ R evalSha(Mode mode, String shaDigest, ReturnType returnType); + /* + * Use getScript(Codec) instead + */ + @Deprecated R evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType); + /** + * Executes Lua script + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + R eval(String key, Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); + + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ R eval(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); + /* + * Use getScript(Codec) instead + */ + @Deprecated R eval(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @return result object + */ R eval(Mode mode, String luaScript, ReturnType returnType); + /* + * Use getScript(Codec) instead + */ + @Deprecated R eval(Mode mode, Codec codec, String luaScript, ReturnType returnType); + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * + * @param luaScript - lua script + * @return SHA-1 digest + */ String scriptLoad(String luaScript); + /** + * Checks for presence Lua scripts in Redis script cache by SHA-1 digest. + * + * @param shaDigests - collection of SHA-1 digests + * @return list of booleans corresponding to collection SHA-1 digests + */ List scriptExists(String ... shaDigests); + /** + * Kills currently executed Lua script + * + */ void scriptKill(); + /** + * Flushes Lua script cache. + * + */ void scriptFlush(); } diff --git a/redisson/src/main/java/org/redisson/api/RScriptAsync.java b/redisson/src/main/java/org/redisson/api/RScriptAsync.java index b448fbb0d..d0bf1d9e1 100644 --- a/redisson/src/main/java/org/redisson/api/RScriptAsync.java +++ b/redisson/src/main/java/org/redisson/api/RScriptAsync.java @@ -22,42 +22,171 @@ import org.redisson.api.RScript.ReturnType; import org.redisson.client.codec.Codec; /** + * Async interface for Redis Script feature * * @author Nikita Koksharov * */ public interface RScriptAsync { + /** + * Flushes Lua script cache. + * + * @return void + */ RFuture scriptFlushAsync(); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ RFuture evalShaAsync(Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); - + + /* + * Use getScript(Codec) instead + */ + @Deprecated RFuture evalShaAsync(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); - RFuture evalShaAsync(String key, Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + RFuture evalShaAsync(String key, Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); - RFuture evalShaAsync(Mode mode, String shaDigest, ReturnType returnType); + /* + * Use getScript(Codec) instead + */ + @Deprecated + RFuture evalShaAsync(String key, Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @return result object + */ + RFuture evalShaAsync(Mode mode, String shaDigest, ReturnType returnType); + + /* + * Use getScript(Codec) instead + */ + @Deprecated RFuture evalShaAsync(Mode mode, Codec codec, String shaDigest, ReturnType returnType); + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ RFuture evalAsync(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); - - RFuture evalAsync(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); + /* + * Use getScript(Codec) instead + */ + @Deprecated + RFuture evalAsync(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); + + /* + * Use getScript(Codec) instead + */ + @Deprecated RFuture evalAsync(String key, Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); + /** + * Executes Lua script + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + RFuture evalAsync(String key, Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); + + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @return result object + */ RFuture evalAsync(Mode mode, String luaScript, ReturnType returnType); + /* + * Use getScript(Codec) instead + */ + @Deprecated RFuture evalAsync(Mode mode, Codec codec, String luaScript, ReturnType returnType); + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * + * @param luaScript - lua script + * @return SHA-1 digest + */ RFuture scriptLoadAsync(String luaScript); - + + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param luaScript - lua script + * @return SHA-1 digest + */ RFuture scriptLoadAsync(String key, String luaScript); + /** + * Checks for presence Lua scripts in Redis script cache by SHA-1 digest. + * + * @param shaDigests - collection of SHA-1 digests + * @return list of booleans corresponding to collection SHA-1 digests + */ RFuture> scriptExistsAsync(String ... shaDigests); - + + /** + * Checks for presence Lua scripts in Redis script cache by SHA-1 digest. + * + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param shaDigests - collection of SHA-1 digests + * @return list of booleans corresponding to collection SHA-1 digests + */ RFuture> scriptExistsAsync(String key, String ... shaDigests); + /** + * Kills currently executed Lua script + * + * @return void + */ RFuture scriptKillAsync(); } diff --git a/redisson/src/main/java/org/redisson/api/RScriptReactive.java b/redisson/src/main/java/org/redisson/api/RScriptReactive.java index 80071f23e..1e6b9bcaf 100644 --- a/redisson/src/main/java/org/redisson/api/RScriptReactive.java +++ b/redisson/src/main/java/org/redisson/api/RScriptReactive.java @@ -30,28 +30,134 @@ import org.redisson.client.codec.Codec; */ public interface RScriptReactive { + /** + * Flushes Lua script cache. + * + * @return void + */ Publisher scriptFlush(); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ Publisher evalSha(Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); - Publisher evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); - + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + Publisher evalSha(String key, Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); + + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @return result object + */ Publisher evalSha(Mode mode, String shaDigest, ReturnType returnType); - Publisher evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType); - + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ Publisher eval(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); - Publisher eval(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); - + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @return result object + */ Publisher eval(Mode mode, String luaScript, ReturnType returnType); - - Publisher eval(Mode mode, Codec codec, String luaScript, ReturnType returnType); - + + /** + * Executes Lua script + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + Publisher eval(String key, Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); + + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * + * @param luaScript - lua script + * @return SHA-1 digest + */ Publisher scriptLoad(String luaScript); + /** + * Checks for presence Lua scripts in Redis script cache by SHA-1 digest. + * + * @param shaDigests - collection of SHA-1 digests + * @return list of booleans corresponding to collection SHA-1 digests + */ Publisher> scriptExists(String ... shaDigests); + /** + * Kills currently executed Lua script + * + * @return void + */ Publisher scriptKill(); + + /* + * Use getScript(Codec) instead + */ + @Deprecated + Publisher evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); + + /* + * Use getScript(Codec) instead + */ + @Deprecated + Publisher evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType); + + /* + * Use getScript(Codec) instead + */ + @Deprecated + Publisher eval(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); + + /* + * Use getScript(Codec) instead + */ + @Deprecated + Publisher eval(Mode mode, Codec codec, String luaScript, ReturnType returnType); } diff --git a/redisson/src/main/java/org/redisson/api/RScriptRx.java b/redisson/src/main/java/org/redisson/api/RScriptRx.java index 521c49cf2..6d315933d 100644 --- a/redisson/src/main/java/org/redisson/api/RScriptRx.java +++ b/redisson/src/main/java/org/redisson/api/RScriptRx.java @@ -19,7 +19,6 @@ import java.util.List; import org.redisson.api.RScript.Mode; import org.redisson.api.RScript.ReturnType; -import org.redisson.client.codec.Codec; import io.reactivex.Flowable; @@ -31,28 +30,110 @@ import io.reactivex.Flowable; */ public interface RScriptRx { + /** + * Flushes Lua script cache. + * + * @return void + */ Flowable scriptFlush(); + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ Flowable evalSha(Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); - Flowable evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType, List keys, Object... values); - + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + Flowable evalSha(String key, Mode mode, String shaDigest, ReturnType returnType, List keys, Object... values); + + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * + * @param - type of result + * @param mode - execution mode + * @param shaDigest - SHA-1 digest + * @param returnType - return type + * @return result object + */ Flowable evalSha(Mode mode, String shaDigest, ReturnType returnType); - Flowable evalSha(Mode mode, Codec codec, String shaDigest, ReturnType returnType); - + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ Flowable eval(Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); - Flowable eval(Mode mode, Codec codec, String luaScript, ReturnType returnType, List keys, Object... values); - + /** + * Executes Lua script + * + * @param - type of result + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @return result object + */ Flowable eval(Mode mode, String luaScript, ReturnType returnType); - - Flowable eval(Mode mode, Codec codec, String luaScript, ReturnType returnType); - + + /** + * Executes Lua script + * + * @param - type of result + * @param key - used to locate Redis node in Cluster which stores cached Lua script + * @param mode - execution mode + * @param luaScript - lua script + * @param returnType - return type + * @param keys - keys available through KEYS param in script + * @param values - values available through VALUES param in script + * @return result object + */ + Flowable eval(String key, Mode mode, String luaScript, ReturnType returnType, List keys, Object... values); + + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * + * @param luaScript - lua script + * @return SHA-1 digest + */ Flowable scriptLoad(String luaScript); + /** + * Checks for presence Lua scripts in Redis script cache by SHA-1 digest. + * + * @param shaDigests - collection of SHA-1 digests + * @return list of booleans corresponding to collection SHA-1 digests + */ Flowable> scriptExists(String ... shaDigests); + /** + * Kills currently executed Lua script + * + * @return void + */ Flowable scriptKill(); } diff --git a/redisson/src/main/java/org/redisson/api/RedissonClient.java b/redisson/src/main/java/org/redisson/api/RedissonClient.java index 668b0818a..3e9fade13 100755 --- a/redisson/src/main/java/org/redisson/api/RedissonClient.java +++ b/redisson/src/main/java/org/redisson/api/RedissonClient.java @@ -862,6 +862,14 @@ public interface RedissonClient { * @return Script object */ RScript getScript(); + + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScript getScript(Codec codec); /** * Returns ScheduledExecutorService by name diff --git a/redisson/src/main/java/org/redisson/api/RedissonReactiveClient.java b/redisson/src/main/java/org/redisson/api/RedissonReactiveClient.java index 9587729cc..1f832edbf 100644 --- a/redisson/src/main/java/org/redisson/api/RedissonReactiveClient.java +++ b/redisson/src/main/java/org/redisson/api/RedissonReactiveClient.java @@ -581,6 +581,14 @@ public interface RedissonReactiveClient { */ RScriptReactive getScript(); + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScriptReactive getScript(Codec codec); + /** * Creates transaction with READ_COMMITTED isolation level. * diff --git a/redisson/src/main/java/org/redisson/api/RedissonRxClient.java b/redisson/src/main/java/org/redisson/api/RedissonRxClient.java index a17ac6529..1ff32c478 100644 --- a/redisson/src/main/java/org/redisson/api/RedissonRxClient.java +++ b/redisson/src/main/java/org/redisson/api/RedissonRxClient.java @@ -569,6 +569,14 @@ public interface RedissonRxClient { */ RScriptRx getScript(); + /** + * Returns script operations object using provided codec. + * + * @param codec - codec for params and result + * @return Script object + */ + RScriptRx getScript(Codec codec); + /** * Creates transaction with READ_COMMITTED isolation level. * diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 514b96261..21f5d84b0 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -682,14 +682,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } protected void stopThreads() { - timer.stop(); - executor.shutdown(); - try { - executor.awaitTermination(15, TimeUnit.SECONDS); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - group.shutdownGracefully().syncUninterruptibly(); + shutdown(); } public PublishSubscribeService getSubscribeService() { diff --git a/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java b/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java index 7f332a852..b96206ac0 100644 --- a/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java +++ b/redisson/src/main/java/org/redisson/connection/dns/MultiDnsAddressResolverGroup.java @@ -35,7 +35,7 @@ import io.netty.util.concurrent.EventExecutor; */ public class MultiDnsAddressResolverGroup extends DnsAddressResolverGroup { - List groups = new ArrayList(); + private final List groups = new ArrayList(); public MultiDnsAddressResolverGroup( Class channelType, @@ -53,6 +53,9 @@ public class MultiDnsAddressResolverGroup extends DnsAddressResolverGroup { break; } } + + // workaround for short DNS names + groups.add(new DnsAddressResolverGroup(channelType, nameServerProvider)); } @Override diff --git a/redisson/src/main/java/org/redisson/reactive/RedissonBatchReactive.java b/redisson/src/main/java/org/redisson/reactive/RedissonBatchReactive.java index e9b8f7e6b..c88b97df8 100644 --- a/redisson/src/main/java/org/redisson/reactive/RedissonBatchReactive.java +++ b/redisson/src/main/java/org/redisson/reactive/RedissonBatchReactive.java @@ -273,6 +273,11 @@ public class RedissonBatchReactive implements RBatchReactive { public RScriptReactive getScript() { return ReactiveProxyBuilder.create(executorService, new RedissonScript(executorService), RScriptReactive.class); } + + @Override + public RScriptReactive getScript(Codec codec) { + return ReactiveProxyBuilder.create(executorService, new RedissonScript(executorService, codec), RScriptReactive.class); + } @Override public RKeysReactive getKeys() { diff --git a/redisson/src/main/java/org/redisson/rx/RedissonBatchRx.java b/redisson/src/main/java/org/redisson/rx/RedissonBatchRx.java index 2cea9b0a8..8f834c464 100644 --- a/redisson/src/main/java/org/redisson/rx/RedissonBatchRx.java +++ b/redisson/src/main/java/org/redisson/rx/RedissonBatchRx.java @@ -282,6 +282,11 @@ public class RedissonBatchRx implements RBatchRx { public RScriptRx getScript() { return RxProxyBuilder.create(executorService, new RedissonScript(executorService), RScriptRx.class); } + + @Override + public RScriptRx getScript(Codec codec) { + return RxProxyBuilder.create(executorService, new RedissonScript(executorService, codec), RScriptRx.class); + } @Override public RKeysRx getKeys() {