diff --git a/pom.xml b/pom.xml
index 8907f379a..106c3a909 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
org.redisson
redisson
- 2.2.10-SNAPSHOT
+ 2.2.11-SNAPSHOT
bundle
Redisson
diff --git a/src/main/java/org/redisson/Redisson.java b/src/main/java/org/redisson/Redisson.java
index 648beb275..f1fdf2953 100755
--- a/src/main/java/org/redisson/Redisson.java
+++ b/src/main/java/org/redisson/Redisson.java
@@ -58,10 +58,10 @@ import org.redisson.core.RListMultimapCache;
import org.redisson.core.RLock;
import org.redisson.core.RMap;
import org.redisson.core.RMapCache;
-import org.redisson.core.RMultimapCache;
import org.redisson.core.RPatternTopic;
import org.redisson.core.RQueue;
import org.redisson.core.RReadWriteLock;
+import org.redisson.core.RRemoteService;
import org.redisson.core.RScoredSortedSet;
import org.redisson.core.RScript;
import org.redisson.core.RSemaphore;
@@ -369,6 +369,10 @@ public class Redisson implements RedissonClient {
return new RedissonScript(commandExecutor);
}
+ public RRemoteService getRemoteSerivce() {
+ return new RedissonRemoteService(this);
+ }
+
@Override
public RSortedSet getSortedSet(String name) {
return new RedissonSortedSet(commandExecutor, name);
diff --git a/src/main/java/org/redisson/RedissonBloomFilter.java b/src/main/java/org/redisson/RedissonBloomFilter.java
index 6b6913039..06fb7b6db 100644
--- a/src/main/java/org/redisson/RedissonBloomFilter.java
+++ b/src/main/java/org/redisson/RedissonBloomFilter.java
@@ -200,7 +200,7 @@ public class RedissonBloomFilter extends RedissonExpirable implements RBloomF
@Override
public Future deleteAsync() {
- return commandExecutor.writeAsync(getName(), RedisCommands.DEL_BOOL, getName(), getConfigName());
+ return commandExecutor.writeAsync(getName(), RedisCommands.DEL_OBJECTS, getName(), getConfigName());
}
private void readConfig() {
diff --git a/src/main/java/org/redisson/RedissonClient.java b/src/main/java/org/redisson/RedissonClient.java
index 270877e9f..edb10dced 100755
--- a/src/main/java/org/redisson/RedissonClient.java
+++ b/src/main/java/org/redisson/RedissonClient.java
@@ -45,6 +45,7 @@ import org.redisson.core.RMapCache;
import org.redisson.core.RPatternTopic;
import org.redisson.core.RQueue;
import org.redisson.core.RReadWriteLock;
+import org.redisson.core.RRemoteService;
import org.redisson.core.RScoredSortedSet;
import org.redisson.core.RScript;
import org.redisson.core.RSemaphore;
@@ -585,6 +586,13 @@ public interface RedissonClient {
*/
RScript getScript();
+ /**
+ * Returns object for remote operations
+ *
+ * @return
+ */
+ RRemoteService getRemoteSerivce();
+
/**
* Return batch object which executes group of
* command in pipeline.
diff --git a/src/main/java/org/redisson/RedissonListMultimapCache.java b/src/main/java/org/redisson/RedissonListMultimapCache.java
index 62a4800ec..2ba95e527 100644
--- a/src/main/java/org/redisson/RedissonListMultimapCache.java
+++ b/src/main/java/org/redisson/RedissonListMultimapCache.java
@@ -22,10 +22,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import org.redisson.client.codec.Codec;
-import org.redisson.client.protocol.RedisCommand;
-import org.redisson.client.protocol.RedisCommand.ValueType;
import org.redisson.client.protocol.RedisCommands;
-import org.redisson.client.protocol.convertor.BooleanReplayConvertor;
import org.redisson.command.CommandAsyncExecutor;
import org.redisson.core.RListMultimapCache;
@@ -39,16 +36,18 @@ import io.netty.util.concurrent.Future;
*/
public class RedissonListMultimapCache extends RedissonListMultimap implements RListMultimapCache {
- private static final RedisCommand EVAL_EXPIRE_KEY = new RedisCommand("EVAL", new BooleanReplayConvertor(), 6, ValueType.MAP_KEY);
+ private final RedissonMultimapCache baseCache;
RedissonListMultimapCache(EvictionScheduler evictionScheduler, CommandAsyncExecutor connectionManager, String name) {
super(connectionManager, name);
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
+ baseCache = new RedissonMultimapCache(connectionManager, name, codec, getTimeoutSetName());
}
RedissonListMultimapCache(EvictionScheduler evictionScheduler, Codec codec, CommandAsyncExecutor connectionManager, String name) {
super(codec, connectionManager, name);
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
+ baseCache = new RedissonMultimapCache(connectionManager, name, codec, getTimeoutSetName());
}
public Future containsKeyAsync(Object key) {
@@ -207,20 +206,27 @@ public class RedissonListMultimapCache extends RedissonListMultimap
@Override
public Future expireKeyAsync(K key, long timeToLive, TimeUnit timeUnit) {
- long ttlTimeout = System.currentTimeMillis() + timeUnit.toMillis(timeToLive);
-
- return commandExecutor.evalWriteAsync(getName(), codec, EVAL_EXPIRE_KEY,
- "if redis.call('hexists', KEYS[1], ARGV[2]) == 1 then "
- + "if tonumber(ARGV[1]) > 0 then "
- + "redis.call('zadd', KEYS[2], ARGV[1], ARGV[2]); " +
- "else " +
- "redis.call('zrem', KEYS[2], ARGV[2]); "
- + "end; "
- + "return 1; "
- + "else "
- + "return 0; "
- + "end",
- Arrays.