diff --git a/redisson/src/main/java/org/redisson/RedissonSortedSet.java b/redisson/src/main/java/org/redisson/RedissonSortedSet.java index ebd808ed1..c33514b2e 100644 --- a/redisson/src/main/java/org/redisson/RedissonSortedSet.java +++ b/redisson/src/main/java/org/redisson/RedissonSortedSet.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.NoSuchElementException; +import java.util.Set; import java.util.SortedSet; import org.redisson.api.RBucket; @@ -162,6 +163,16 @@ public class RedissonSortedSet extends RedissonObject implements RSortedSet readAll() { + return get(readAllAsync()); + } + + @Override + public RFuture> readAllAsync() { + return commandExecutor.readAsync(getName(), codec, RedisCommands.LRANGE_SET, getName(), 0, -1); + } + @Override public int size() { return list.size(); @@ -316,7 +327,7 @@ public class RedissonSortedSet extends RedissonObject implements RSortedSet c) { boolean changed = false; - for (Iterator iterator = iterator(); iterator.hasNext();) { + for (Iterator iterator = iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); if (!c.contains(object)) { iterator.remove(); diff --git a/redisson/src/main/java/org/redisson/api/RSortedSet.java b/redisson/src/main/java/org/redisson/api/RSortedSet.java index dc72886d6..df8e3281f 100644 --- a/redisson/src/main/java/org/redisson/api/RSortedSet.java +++ b/redisson/src/main/java/org/redisson/api/RSortedSet.java @@ -16,10 +16,15 @@ package org.redisson.api; import java.util.Comparator; +import java.util.Set; import java.util.SortedSet; public interface RSortedSet extends SortedSet, RObject { + Set readAll(); + + RFuture> readAllAsync(); + RFuture addAsync(V value); RFuture removeAsync(V value); 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 469e3194b..2a4fbd99e 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -188,6 +188,7 @@ public interface RedisCommands { RedisCommand LPUSH_BOOLEAN = new RedisCommand("LPUSH", new TrueReplayConvertor(), 2, ValueType.OBJECTS); RedisStrictCommand LPUSH_VOID = new RedisStrictCommand("LPUSH", new VoidReplayConvertor(), 2); RedisCommand> LRANGE = new RedisCommand>("LRANGE", new ObjectListReplayDecoder()); + RedisCommand> LRANGE_SET = new RedisCommand>("LRANGE", new ObjectSetReplayDecoder()); RedisCommand RPUSH = new RedisCommand("RPUSH", 2, ValueType.OBJECTS); RedisCommand RPUSH_BOOLEAN = new RedisCommand("RPUSH", new TrueReplayConvertor(), 2, ValueType.OBJECTS); RedisCommand RPUSH_VOID = new RedisCommand("RPUSH", new VoidReplayConvertor(), 2, ValueType.OBJECTS); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java index c3aebefdb..41defa918 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectSetReplayDecoder.java @@ -15,7 +15,6 @@ */ package org.redisson.client.protocol.decoder; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -24,6 +23,12 @@ import org.redisson.client.handler.State; import io.netty.buffer.ByteBuf; +/** + * + * @author Nikita Koksharov + * + * @param value type + */ public class ObjectSetReplayDecoder implements MultiDecoder> { @Override diff --git a/redisson/src/test/java/org/redisson/RedissonSortedSetTest.java b/redisson/src/test/java/org/redisson/RedissonSortedSetTest.java index c601f055f..255550c94 100644 --- a/redisson/src/test/java/org/redisson/RedissonSortedSetTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSortedSetTest.java @@ -17,6 +17,17 @@ import org.redisson.api.RSortedSet; public class RedissonSortedSetTest extends BaseTest { + @Test + public void testReadAll() { + RSortedSet set = redisson.getSortedSet("simple"); + set.add(2); + set.add(0); + set.add(1); + set.add(5); + + assertThat(set.readAll()).containsExactly(0, 1, 2, 5); + } + @Test public void testAddAsync() throws InterruptedException, ExecutionException { RSortedSet set = redisson.getSortedSet("simple");