diff --git a/README.md b/README.md
index f01263216..f84444263 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@ __NOTE__: Both version lines have same features except `CompletionStage` interfa
Please read [documentation](https://github.com/redisson/redisson/wiki) for more details.
Redisson [releases history](https://github.com/redisson/redisson/blob/master/CHANGELOG.md)
Checkout more [code examples](https://github.com/redisson/redisson-examples)
+Browse [javadocs](http://www.javadoc.io/doc/org.redisson/redisson/3.2.2)
Licensed under the Apache License 2.0.
@@ -61,6 +62,7 @@ Features
Remote service, Live Object service, Executor service, Scheduler service
* [Spring Cache](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#141-spring-cache) implementation
* [Hibernate Cache](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#142-hibernate-cache) implementation
+* [JCache API (JSR-107)](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#143-jcache-api-jsr-107-implementation) implementation
* [Tomcat Session Manager](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks#144-tomcat-redis-session-manager) implementation
* [Spring Session](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#145-spring-session) implementation
* [Reactive Streams](https://github.com/redisson/redisson/wiki/3.-operations-execution#32-reactive-way)
@@ -80,6 +82,7 @@ Articles
================================
[Java data structures powered by Redis. Introduction to Redisson (pdf)](http://redisson.org/Redisson.pdf)
+[Moving from Hazelcast to Redis](https://engineering.datorama.com/moving-from-hazelcast-to-redis-b90a0769d1cb)
[A Look at the Java Distributed In-Memory Data Model (Powered by Redis)](https://dzone.com/articles/java-distributed-in-memory-data-model-powered-by-r)
[Distributed tasks Execution and Scheduling in Java, powered by Redis](https://dzone.com/articles/distributed-tasks-execution-and-scheduling-in-java)
[Introducing Redisson Live Objects (Object Hash Mapping)](https://dzone.com/articles/introducing-redisson-live-object-object-hash-mappi)
diff --git a/redisson-all/pom.xml b/redisson-all/pom.xml
index 56743bae4..1a5d7140a 100644
--- a/redisson-all/pom.xml
+++ b/redisson-all/pom.xml
@@ -83,6 +83,11 @@
redisson
${project.version}
+
+ org.redisson
+ redisson-benchmark
+ ${project.version}
+
io.netty
netty-transport-native-epoll
diff --git a/redisson-tomcat/README.md b/redisson-tomcat/README.md
index 4285e20cb..b4642bcd2 100644
--- a/redisson-tomcat/README.md
+++ b/redisson-tomcat/README.md
@@ -21,22 +21,22 @@ Usage
2. Copy two jars into `TOMCAT_BASE/lib` directory:
1. __For JDK 1.8+__
- [redisson-all-3.2.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.2.0&e=jar)
+ [redisson-all-3.2.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.2.2&e=jar)
for Tomcat 6.x
- [redisson-tomcat-6-3.2.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=3.2.0&e=jar)
+ [redisson-tomcat-6-3.2.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=3.2.2&e=jar)
for Tomcat 7.x
- [redisson-tomcat-7-3.2.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=3.2.0&e=jar)
+ [redisson-tomcat-7-3.2.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=3.2.2&e=jar)
for Tomcat 8.x
- [redisson-tomcat-8-3.2.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=3.2.0&e=jar)
+ [redisson-tomcat-8-3.2.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=3.2.2&e=jar)
1. __For JDK 1.6+__
- [redisson-all-2.7.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.7.0&e=jar)
+ [redisson-all-2.7.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.7.2&e=jar)
for Tomcat 6.x
- [redisson-tomcat-6-2.7.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=2.7.0&e=jar)
+ [redisson-tomcat-6-2.7.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=2.7.2&e=jar)
for Tomcat 7.x
- [redisson-tomcat-7-2.7.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=2.7.0&e=jar)
+ [redisson-tomcat-7-2.7.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=2.7.2&e=jar)
for Tomcat 8.x
- [redisson-tomcat-8-2.7.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=2.7.0&e=jar)
+ [redisson-tomcat-8-2.7.2.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=2.7.2&e=jar)
diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java
index b1a9abac2..a8981b95b 100644
--- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java
+++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java
@@ -15,6 +15,7 @@
*/
package org.redisson.tomcat;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -33,11 +34,19 @@ import org.redisson.api.RMap;
public class RedissonSession extends StandardSession {
private final RedissonSessionManager redissonManager;
+ private final Map attrs;
private RMap map;
public RedissonSession(RedissonSessionManager manager) {
super(manager);
this.redissonManager = manager;
+
+ try {
+ Field attr = StandardSession.class.getDeclaredField("attributes");
+ attrs = (Map) attr.get(this);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
}
private static final long serialVersionUID = -2518607181636076487L;
@@ -143,7 +152,7 @@ public class RedissonSession extends StandardSession {
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
- for (Entry entry : attributes.entrySet()) {
+ for (Entry entry : attrs.entrySet()) {
newMap.put(entry.getKey(), entry.getValue());
}
diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java
index b1a9abac2..31db2671f 100644
--- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java
+++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java
@@ -15,6 +15,7 @@
*/
package org.redisson.tomcat;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -33,11 +34,18 @@ import org.redisson.api.RMap;
public class RedissonSession extends StandardSession {
private final RedissonSessionManager redissonManager;
+ private final Map attrs;
private RMap map;
public RedissonSession(RedissonSessionManager manager) {
super(manager);
this.redissonManager = manager;
+ try {
+ Field attr = StandardSession.class.getDeclaredField("attributes");
+ attrs = (Map) attr.get(this);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
}
private static final long serialVersionUID = -2518607181636076487L;
@@ -143,7 +151,7 @@ public class RedissonSession extends StandardSession {
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
- for (Entry entry : attributes.entrySet()) {
+ for (Entry entry : attrs.entrySet()) {
newMap.put(entry.getKey(), entry.getValue());
}
diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java
index b1a9abac2..a8981b95b 100644
--- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java
+++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java
@@ -15,6 +15,7 @@
*/
package org.redisson.tomcat;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -33,11 +34,19 @@ import org.redisson.api.RMap;
public class RedissonSession extends StandardSession {
private final RedissonSessionManager redissonManager;
+ private final Map attrs;
private RMap map;
public RedissonSession(RedissonSessionManager manager) {
super(manager);
this.redissonManager = manager;
+
+ try {
+ Field attr = StandardSession.class.getDeclaredField("attributes");
+ attrs = (Map) attr.get(this);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
}
private static final long serialVersionUID = -2518607181636076487L;
@@ -143,7 +152,7 @@ public class RedissonSession extends StandardSession {
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
- for (Entry entry : attributes.entrySet()) {
+ for (Entry entry : attrs.entrySet()) {
newMap.put(entry.getKey(), entry.getValue());
}
diff --git a/redisson/src/main/java/org/redisson/Redisson.java b/redisson/src/main/java/org/redisson/Redisson.java
index 4d929bbee..801e55f79 100755
--- a/redisson/src/main/java/org/redisson/Redisson.java
+++ b/redisson/src/main/java/org/redisson/Redisson.java
@@ -240,12 +240,12 @@ public class Redisson implements RedissonClient {
@Override
public RListMultimap getListMultimap(String name) {
- return new RedissonListMultimap(connectionManager.getCommandExecutor(), name);
+ return new RedissonListMultimap(this, connectionManager.getCommandExecutor(), name);
}
@Override
public RListMultimap getListMultimap(String name, Codec codec) {
- return new RedissonListMultimap(codec, connectionManager.getCommandExecutor(), name);
+ return new RedissonListMultimap(this, codec, connectionManager.getCommandExecutor(), name);
}
@Override
@@ -260,37 +260,37 @@ public class Redisson implements RedissonClient {
@Override
public RMap getMap(String name) {
- return new RedissonMap(connectionManager.getCommandExecutor(), name);
+ return new RedissonMap(this, connectionManager.getCommandExecutor(), name);
}
@Override
public RSetMultimap getSetMultimap(String name) {
- return new RedissonSetMultimap(connectionManager.getCommandExecutor(), name);
+ return new RedissonSetMultimap(this, connectionManager.getCommandExecutor(), name);
}
@Override
public RSetMultimapCache getSetMultimapCache(String name) {
- return new RedissonSetMultimapCache(evictionScheduler, connectionManager.getCommandExecutor(), name);
+ return new RedissonSetMultimapCache(this, evictionScheduler, connectionManager.getCommandExecutor(), name);
}
@Override
public RSetMultimapCache getSetMultimapCache(String name, Codec codec) {
- return new RedissonSetMultimapCache(evictionScheduler, codec, connectionManager.getCommandExecutor(), name);
+ return new RedissonSetMultimapCache(this, evictionScheduler, codec, connectionManager.getCommandExecutor(), name);
}
@Override
public RListMultimapCache getListMultimapCache(String name) {
- return new RedissonListMultimapCache(evictionScheduler, connectionManager.getCommandExecutor(), name);
+ return new RedissonListMultimapCache(this, evictionScheduler, connectionManager.getCommandExecutor(), name);
}
@Override
public RListMultimapCache getListMultimapCache(String name, Codec codec) {
- return new RedissonListMultimapCache(evictionScheduler, codec, connectionManager.getCommandExecutor(), name);
+ return new RedissonListMultimapCache(this, evictionScheduler, codec, connectionManager.getCommandExecutor(), name);
}
@Override
public RSetMultimap getSetMultimap(String name, Codec codec) {
- return new RedissonSetMultimap(codec, connectionManager.getCommandExecutor(), name);
+ return new RedissonSetMultimap(this, codec, connectionManager.getCommandExecutor(), name);
}
@Override
@@ -305,17 +305,17 @@ public class Redisson implements RedissonClient {
@Override
public RMapCache getMapCache(String name) {
- return new RedissonMapCache(evictionScheduler, connectionManager.getCommandExecutor(), name);
+ return new RedissonMapCache(this, evictionScheduler, connectionManager.getCommandExecutor(), name);
}
@Override
public RMapCache getMapCache(String name, Codec codec) {
- return new RedissonMapCache(codec, evictionScheduler, connectionManager.getCommandExecutor(), name);
+ return new RedissonMapCache(this, codec, evictionScheduler, connectionManager.getCommandExecutor(), name);
}
@Override
public RMap getMap(String name, Codec codec) {
- return new RedissonMap(codec, connectionManager.getCommandExecutor(), name);
+ return new RedissonMap(this, codec, connectionManager.getCommandExecutor(), name);
}
@Override
@@ -538,7 +538,7 @@ public class Redisson implements RedissonClient {
@Override
public RBatch createBatch() {
- RedissonBatch batch = new RedissonBatch(evictionScheduler, connectionManager);
+ RedissonBatch batch = new RedissonBatch(this, evictionScheduler, connectionManager);
if (config.isRedissonReferenceEnabled()) {
batch.enableRedissonReferenceSupport(this);
}
diff --git a/redisson/src/main/java/org/redisson/RedissonBaseIterator.java b/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
index 0f85a46d9..fc9151f8d 100644
--- a/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
+++ b/redisson/src/main/java/org/redisson/RedissonBaseIterator.java
@@ -22,12 +22,15 @@ import java.util.List;
import java.util.NoSuchElementException;
import org.redisson.client.protocol.decoder.ListScanResult;
+import org.redisson.client.protocol.decoder.ScanObjectEntry;
+
+import io.netty.buffer.ByteBuf;
abstract class RedissonBaseIterator implements Iterator {
- private List firstValues;
- private List lastValues;
- private Iterator lastIter;
+ private List firstValues;
+ private List lastValues;
+ private Iterator lastIter;
protected long nextIterPos;
protected InetSocketAddress client;
@@ -40,6 +43,8 @@ abstract class RedissonBaseIterator implements Iterator {
public boolean hasNext() {
if (lastIter == null || !lastIter.hasNext()) {
if (finished) {
+ free(firstValues);
+ free(lastValues);
currentElementRemoved = false;
removeExecuted = false;
@@ -56,8 +61,12 @@ abstract class RedissonBaseIterator implements Iterator {
long prevIterPos;
do {
prevIterPos = nextIterPos;
- ListScanResult res = iterator(client, nextIterPos);
- lastValues = new ArrayList(res.getValues());
+ ListScanResult res = iterator(client, nextIterPos);
+ if (lastValues != null) {
+ free(lastValues);
+ }
+
+ lastValues = convert(res.getValues());
client = res.getRedisClient();
if (nextIterPos == 0 && firstValues == null) {
@@ -87,6 +96,9 @@ abstract class RedissonBaseIterator implements Iterator {
}
}
} else if (lastValues.removeAll(firstValues)) {
+ free(firstValues);
+ free(lastValues);
+
currentElementRemoved = false;
removeExecuted = false;
client = null;
@@ -111,11 +123,28 @@ abstract class RedissonBaseIterator implements Iterator {
return lastIter.hasNext();
}
+ private List convert(List list) {
+ List result = new ArrayList(list.size());
+ for (ScanObjectEntry entry : list) {
+ result.add(entry.getBuf());
+ }
+ return result;
+ }
+
+ private void free(List list) {
+ if (list == null) {
+ return;
+ }
+ for (ByteBuf byteBuf : list) {
+ byteBuf.release();
+ }
+ }
+
protected boolean tryAgain() {
return false;
}
- abstract ListScanResult iterator(InetSocketAddress client, long nextIterPos);
+ abstract ListScanResult iterator(InetSocketAddress client, long nextIterPos);
@Override
public V next() {
@@ -123,7 +152,7 @@ abstract class RedissonBaseIterator implements Iterator {
throw new NoSuchElementException("No such element");
}
- value = lastIter.next();
+ value = (V) lastIter.next().getObj();
currentElementRemoved = false;
return value;
}
diff --git a/redisson/src/main/java/org/redisson/RedissonBatch.java b/redisson/src/main/java/org/redisson/RedissonBatch.java
index fc7f9c774..dfd4181a2 100644
--- a/redisson/src/main/java/org/redisson/RedissonBatch.java
+++ b/redisson/src/main/java/org/redisson/RedissonBatch.java
@@ -41,6 +41,7 @@ import org.redisson.api.RScriptAsync;
import org.redisson.api.RSetAsync;
import org.redisson.api.RSetCacheAsync;
import org.redisson.api.RTopicAsync;
+import org.redisson.api.RedissonClient;
import org.redisson.client.codec.Codec;
import org.redisson.command.CommandBatchService;
import org.redisson.connection.ConnectionManager;
@@ -55,10 +56,12 @@ public class RedissonBatch implements RBatch {
private final EvictionScheduler evictionScheduler;
private final CommandBatchService executorService;
+ private final RedissonClient client;
- protected RedissonBatch(EvictionScheduler evictionScheduler, ConnectionManager connectionManager) {
+ protected RedissonBatch(RedissonClient client, EvictionScheduler evictionScheduler, ConnectionManager connectionManager) {
this.executorService = new CommandBatchService(connectionManager);
this.evictionScheduler = evictionScheduler;
+ this.client = client;
}
@Override
@@ -93,12 +96,12 @@ public class RedissonBatch implements RBatch {
@Override
public RMapAsync getMap(String name) {
- return new RedissonMap(executorService, name);
+ return new RedissonMap(client, executorService, name);
}
@Override
public RMapAsync getMap(String name, Codec codec) {
- return new RedissonMap(codec, executorService, name);
+ return new RedissonMap(client, codec, executorService, name);
}
@Override
@@ -193,12 +196,12 @@ public class RedissonBatch implements RBatch {
@Override
public RMapCacheAsync getMapCache(String name, Codec codec) {
- return new RedissonMapCache(codec, evictionScheduler, executorService, name);
+ return new RedissonMapCache(client, codec, evictionScheduler, executorService, name);
}
@Override
public RMapCacheAsync getMapCache(String name) {
- return new RedissonMapCache(evictionScheduler, executorService, name);
+ return new RedissonMapCache(client, evictionScheduler, executorService, name);
}
@Override
@@ -243,22 +246,22 @@ public class RedissonBatch implements RBatch {
@Override
public RMultimapAsync getSetMultimap(String name) {
- return new RedissonSetMultimap(executorService, name);
+ return new RedissonSetMultimap(client, executorService, name);
}
@Override
public RMultimapAsync getSetMultimap(String name, Codec codec) {
- return new RedissonSetMultimap(codec, executorService, name);
+ return new RedissonSetMultimap(client, codec, executorService, name);
}
@Override
public RMultimapAsync getListMultimap(String name) {
- return new RedissonListMultimap(executorService, name);
+ return new RedissonListMultimap(client, executorService, name);
}
@Override
public RMultimapAsync getListMultimap(String name, Codec codec) {
- return new RedissonListMultimap(codec, executorService, name);
+ return new RedissonListMultimap(client, codec, executorService, name);
}
@Override
@@ -273,22 +276,22 @@ public class RedissonBatch implements RBatch {
@Override
public RMultimapCacheAsync getSetMultimapCache(String name) {
- return new RedissonSetMultimapCache(evictionScheduler, executorService, name);
+ return new RedissonSetMultimapCache(client, evictionScheduler, executorService, name);
}
@Override
public RMultimapCacheAsync getSetMultimapCache(String name, Codec codec) {
- return new RedissonSetMultimapCache(evictionScheduler, codec, executorService, name);
+ return new RedissonSetMultimapCache(client, evictionScheduler, codec, executorService, name);
}
@Override
public RMultimapCacheAsync getListMultimapCache(String name) {
- return new RedissonListMultimapCache(evictionScheduler, executorService, name);
+ return new RedissonListMultimapCache(client, evictionScheduler, executorService, name);
}
@Override
public RMultimapCacheAsync getListMultimapCache(String name, Codec codec) {
- return new RedissonListMultimapCache(evictionScheduler, codec, executorService, name);
+ return new RedissonListMultimapCache(client, evictionScheduler, codec, executorService, name);
}
protected void enableRedissonReferenceSupport(Redisson redisson) {
diff --git a/redisson/src/main/java/org/redisson/RedissonKeys.java b/redisson/src/main/java/org/redisson/RedissonKeys.java
index 84e994b7e..449cbdec4 100644
--- a/redisson/src/main/java/org/redisson/RedissonKeys.java
+++ b/redisson/src/main/java/org/redisson/RedissonKeys.java
@@ -33,9 +33,11 @@ import org.redisson.api.RFuture;
import org.redisson.api.RKeys;
import org.redisson.api.RType;
import org.redisson.client.RedisException;
+import org.redisson.client.codec.ScanCodec;
import org.redisson.client.codec.StringCodec;
import org.redisson.client.protocol.RedisCommands;
import org.redisson.client.protocol.decoder.ListScanResult;
+import org.redisson.client.protocol.decoder.ScanObjectEntry;
import org.redisson.command.CommandAsyncExecutor;
import org.redisson.command.CommandBatchService;
import org.redisson.connection.MasterSlaveEntry;
@@ -104,12 +106,12 @@ public class RedissonKeys implements RKeys {
return getKeysByPattern(null);
}
- private ListScanResult scanIterator(InetSocketAddress client, MasterSlaveEntry entry, long startPos, String pattern, int count) {
+ private ListScanResult scanIterator(InetSocketAddress client, MasterSlaveEntry entry, long startPos, String pattern, int count) {
if (pattern == null) {
- RFuture> f = commandExecutor.readAsync(client, entry, StringCodec.INSTANCE, RedisCommands.SCAN, startPos, "COUNT", count);
+ RFuture> f = commandExecutor.readAsync(client, entry, new ScanCodec(StringCodec.INSTANCE), RedisCommands.SCAN, startPos, "COUNT", count);
return commandExecutor.get(f);
}
- RFuture> f = commandExecutor.readAsync(client, entry, StringCodec.INSTANCE, RedisCommands.SCAN, startPos, "MATCH", pattern, "COUNT", count);
+ RFuture> f = commandExecutor.readAsync(client, entry, new ScanCodec(StringCodec.INSTANCE), RedisCommands.SCAN, startPos, "MATCH", pattern, "COUNT", count);
return commandExecutor.get(f);
}
@@ -117,7 +119,7 @@ public class RedissonKeys implements RKeys {
return new RedissonBaseIterator() {
@Override
- ListScanResult iterator(InetSocketAddress client, long nextIterPos) {
+ ListScanResult iterator(InetSocketAddress client, long nextIterPos) {
return RedissonKeys.this.scanIterator(client, entry, nextIterPos, pattern, count);
}
diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimap.java b/redisson/src/main/java/org/redisson/RedissonListMultimap.java
index 766377f7f..ef1703d15 100644
--- a/redisson/src/main/java/org/redisson/RedissonListMultimap.java
+++ b/redisson/src/main/java/org/redisson/RedissonListMultimap.java
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
import org.redisson.api.RFuture;
import org.redisson.api.RList;
import org.redisson.api.RListMultimap;
+import org.redisson.api.RedissonClient;
import org.redisson.client.codec.Codec;
import org.redisson.client.protocol.RedisCommands;
import org.redisson.client.protocol.RedisStrictCommand;
@@ -44,12 +45,12 @@ public class RedissonListMultimap extends RedissonMultimap implement
private static final RedisStrictCommand LLEN_VALUE = new RedisStrictCommand("LLEN", new BooleanAmountReplayConvertor());
- RedissonListMultimap(CommandAsyncExecutor connectionManager, String name) {
- super(connectionManager, name);
+ RedissonListMultimap(RedissonClient client, CommandAsyncExecutor connectionManager, String name) {
+ super(client, connectionManager, name);
}
- RedissonListMultimap(Codec codec, CommandAsyncExecutor connectionManager, String name) {
- super(codec, connectionManager, name);
+ RedissonListMultimap(RedissonClient client, Codec codec, CommandAsyncExecutor connectionManager, String name) {
+ super(client, codec, connectionManager, name);
}
@Override
diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java b/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java
index 3f2184d66..a30628f26 100644
--- a/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java
+++ b/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java
@@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit;
import org.redisson.api.RFuture;
import org.redisson.api.RList;
import org.redisson.api.RListMultimapCache;
+import org.redisson.api.RedissonClient;
import org.redisson.client.codec.Codec;
import org.redisson.client.protocol.RedisCommands;
import org.redisson.command.CommandAsyncExecutor;
@@ -36,14 +37,14 @@ public class RedissonListMultimapCache extends RedissonListMultimap
private final RedissonMultimapCache baseCache;
- RedissonListMultimapCache(EvictionScheduler evictionScheduler, CommandAsyncExecutor connectionManager, String name) {
- super(connectionManager, name);
+ RedissonListMultimapCache(RedissonClient client, EvictionScheduler evictionScheduler, CommandAsyncExecutor connectionManager, String name) {
+ super(client, 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);
+ RedissonListMultimapCache(RedissonClient client, EvictionScheduler evictionScheduler, Codec codec, CommandAsyncExecutor connectionManager, String name) {
+ super(client, codec, connectionManager, name);
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
baseCache = new RedissonMultimapCache(connectionManager, name, codec, getTimeoutSetName());
}
diff --git a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java
index b452837d4..36f90fdea 100644
--- a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java
+++ b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java
@@ -190,12 +190,12 @@ public class RedissonLocalCachedMap extends RedissonMap implements R
private int invalidationListenerId;
protected RedissonLocalCachedMap(RedissonClient redisson, CommandAsyncExecutor commandExecutor, String name, LocalCachedMapOptions options) {
- super(commandExecutor, name);
+ super(redisson, commandExecutor, name);
init(redisson, name, options);
}
protected RedissonLocalCachedMap(RedissonClient redisson, Codec codec, CommandAsyncExecutor connectionManager, String name, LocalCachedMapOptions options) {
- super(codec, connectionManager, name);
+ super(redisson, codec, connectionManager, name);
init(redisson, name, options);
}
diff --git a/redisson/src/main/java/org/redisson/RedissonMap.java b/redisson/src/main/java/org/redisson/RedissonMap.java
index 490c71632..b8dc79afc 100644
--- a/redisson/src/main/java/org/redisson/RedissonMap.java
+++ b/redisson/src/main/java/org/redisson/RedissonMap.java
@@ -15,6 +15,7 @@
*/
package org.redisson;
+import java.io.IOException;
import java.math.BigDecimal;
import java.net.InetSocketAddress;
import java.util.AbstractCollection;
@@ -29,9 +30,11 @@ import java.util.Map;
import java.util.Set;
import org.redisson.api.RFuture;
+import org.redisson.api.RLock;
import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
import org.redisson.client.codec.Codec;
-import org.redisson.client.codec.ScanCodec;
+import org.redisson.client.codec.MapScanCodec;
import org.redisson.client.codec.StringCodec;
import org.redisson.client.protocol.RedisCommand;
import org.redisson.client.protocol.RedisCommand.ValueType;
@@ -42,6 +45,7 @@ import org.redisson.client.protocol.decoder.MapScanResult;
import org.redisson.client.protocol.decoder.ScanObjectEntry;
import org.redisson.command.CommandAsyncExecutor;
import org.redisson.connection.decoder.MapGetAllDecoder;
+import org.redisson.misc.Hash;
/**
* Distributed and concurrent implementation of {@link java.util.concurrent.ConcurrentMap}
@@ -60,14 +64,33 @@ public class RedissonMap extends RedissonExpirable implements RMap {
static final RedisCommand EVAL_REMOVE_VALUE = new RedisCommand("EVAL", new BooleanReplayConvertor(), 4, ValueType.MAP);
static final RedisCommand