From 0bf7e29baa6e953eddaf47376af6957873814369 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 23 Sep 2016 14:00:30 +0300 Subject: [PATCH] RScoredSortedSet.valueRangeReversed and entryRangeReversed methods added. #629 --- .../org/redisson/RedissonScoredSortedSet.java | 22 ++++++++++++ .../org/redisson/api/RScoredSortedSet.java | 4 +++ .../redisson/api/RScoredSortedSetAsync.java | 4 +++ .../client/protocol/RedisCommands.java | 2 ++ .../redisson/RedissonScoredSortedSetTest.java | 35 +++++++++++++++++++ 5 files changed, 67 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonScoredSortedSet.java b/redisson/src/main/java/org/redisson/RedissonScoredSortedSet.java index 79f58f5eb..21d39c465 100644 --- a/redisson/src/main/java/org/redisson/RedissonScoredSortedSet.java +++ b/redisson/src/main/java/org/redisson/RedissonScoredSortedSet.java @@ -372,6 +372,16 @@ public class RedissonScoredSortedSet extends RedissonExpirable implements RSc return commandExecutor.readAsync(getName(), codec, RedisCommands.ZRANGE, getName(), startIndex, endIndex); } + @Override + public Collection valueRangeReversed(int startIndex, int endIndex) { + return get(valueRangeReversedAsync(startIndex, endIndex)); + } + + @Override + public RFuture> valueRangeReversedAsync(int startIndex, int endIndex) { + return commandExecutor.readAsync(getName(), codec, RedisCommands.ZREVRANGE, getName(), startIndex, endIndex); + } + @Override public Collection> entryRange(int startIndex, int endIndex) { return get(entryRangeAsync(startIndex, endIndex)); @@ -382,6 +392,16 @@ public class RedissonScoredSortedSet extends RedissonExpirable implements RSc return commandExecutor.readAsync(getName(), codec, RedisCommands.ZRANGE_ENTRY, getName(), startIndex, endIndex, "WITHSCORES"); } + @Override + public Collection> entryRangeReversed(int startIndex, int endIndex) { + return get(entryRangeReversedAsync(startIndex, endIndex)); + } + + @Override + public RFuture>> entryRangeReversedAsync(int startIndex, int endIndex) { + return commandExecutor.readAsync(getName(), codec, RedisCommands.ZREVRANGE_ENTRY, getName(), startIndex, endIndex, "WITHSCORES"); + } + @Override public Collection valueRange(double startScore, boolean startScoreInclusive, double endScore, boolean endScoreInclusive) { return get(valueRangeAsync(startScore, startScoreInclusive, endScore, endScoreInclusive)); @@ -479,10 +499,12 @@ public class RedissonScoredSortedSet extends RedissonExpirable implements RSc return get(revRankAsync(o)); } + @Override public Long count(double startScore, boolean startScoreInclusive, double endScore, boolean endScoreInclusive) { return get(countAsync(startScore, startScoreInclusive, endScore, endScoreInclusive)); } + @Override public RFuture countAsync(double startScore, boolean startScoreInclusive, double endScore, boolean endScoreInclusive) { String startValue = value(startScore, startScoreInclusive); String endValue = value(endScore, endScoreInclusive); diff --git a/redisson/src/main/java/org/redisson/api/RScoredSortedSet.java b/redisson/src/main/java/org/redisson/api/RScoredSortedSet.java index 757aab093..4d5d3e716 100644 --- a/redisson/src/main/java/org/redisson/api/RScoredSortedSet.java +++ b/redisson/src/main/java/org/redisson/api/RScoredSortedSet.java @@ -103,8 +103,12 @@ public interface RScoredSortedSet extends RScoredSortedSetAsync, Iterable< Double addScore(V object, Number value); Collection valueRange(int startIndex, int endIndex); + + Collection valueRangeReversed(int startIndex, int endIndex); Collection> entryRange(int startIndex, int endIndex); + + Collection> entryRangeReversed(int startIndex, int endIndex); Collection valueRange(double startScore, boolean startScoreInclusive, double endScore, boolean endScoreInclusive); diff --git a/redisson/src/main/java/org/redisson/api/RScoredSortedSetAsync.java b/redisson/src/main/java/org/redisson/api/RScoredSortedSetAsync.java index 33b55cfe7..f4649fcbd 100644 --- a/redisson/src/main/java/org/redisson/api/RScoredSortedSetAsync.java +++ b/redisson/src/main/java/org/redisson/api/RScoredSortedSetAsync.java @@ -78,8 +78,12 @@ public interface RScoredSortedSetAsync extends RExpirableAsync { RFuture addScoreAsync(V object, Number value); RFuture> valueRangeAsync(int startIndex, int endIndex); + + RFuture> valueRangeReversedAsync(int startIndex, int endIndex); RFuture>> entryRangeAsync(int startIndex, int endIndex); + + RFuture>> entryRangeReversedAsync(int startIndex, int endIndex); RFuture> valueRangeAsync(double startScore, boolean startScoreInclusive, double endScore, boolean endScoreInclusive); 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 64822ebfa..0c1ea7833 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/redisson/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -111,7 +111,9 @@ public interface RedisCommands { RedisCommand> ZRANGEBYLEX = new RedisCommand>("ZRANGEBYLEX", new ObjectListReplayDecoder()); RedisCommand> ZRANGEBYSCORE = new RedisCommand>("ZRANGEBYSCORE", new ObjectSetReplayDecoder()); RedisCommand> ZRANGEBYSCORE_LIST = new RedisCommand>("ZRANGEBYSCORE", new ObjectListReplayDecoder()); + RedisCommand> ZREVRANGE = new RedisCommand>("ZREVRANGE", new ObjectListReplayDecoder()); RedisCommand> ZREVRANGEBYSCORE = new RedisCommand>("ZREVRANGEBYSCORE", new ObjectListReplayDecoder()); + RedisCommand>> ZREVRANGE_ENTRY = new RedisCommand>>("ZREVRANGE", new ScoredSortedSetReplayDecoder()); RedisCommand>> ZREVRANGEBYSCORE_ENTRY = new RedisCommand>>("ZREVRANGEBYSCORE", new ScoredSortedSetReplayDecoder()); RedisCommand>> ZRANGE_ENTRY = new RedisCommand>>("ZRANGE", new ScoredSortedSetReplayDecoder()); RedisCommand>> ZRANGEBYSCORE_ENTRY = new RedisCommand>>("ZRANGEBYSCORE", new ScoredSortedSetReplayDecoder()); diff --git a/redisson/src/test/java/org/redisson/RedissonScoredSortedSetTest.java b/redisson/src/test/java/org/redisson/RedissonScoredSortedSetTest.java index 9efd448e1..181f431da 100644 --- a/redisson/src/test/java/org/redisson/RedissonScoredSortedSetTest.java +++ b/redisson/src/test/java/org/redisson/RedissonScoredSortedSetTest.java @@ -542,6 +542,21 @@ public class RedissonScoredSortedSetTest extends BaseTest { Collection vals = set.valueRange(0, -1); assertThat(vals).containsExactly(1, 2, 3, 4, 5); } + + @Test + public void testValueRangeReversed() { + RScoredSortedSet set = redisson.getScoredSortedSet("simple"); + set.add(0, 1); + set.add(1, 2); + set.add(2, 3); + set.add(3, 4); + set.add(4, 5); + set.add(4, 5); + + Collection vals = set.valueRangeReversed(0, -1); + assertThat(vals).containsExactly(5, 4, 3, 2, 1); + } + @Test public void testEntryRange() { @@ -559,6 +574,26 @@ public class RedissonScoredSortedSetTest extends BaseTest { new ScoredEntry(40D, 4), new ScoredEntry(50D, 5)); } + + @Test + public void testEntryRangeReversed() { + RScoredSortedSet set = redisson.getScoredSortedSet("simple"); + set.add(10, 1); + set.add(20, 2); + set.add(30, 3); + set.add(40, 4); + set.add(50, 5); + + Collection> vals = set.entryRangeReversed(0, -1); + assertThat(vals).containsExactly( + new ScoredEntry(50D, 5), + new ScoredEntry(40D, 4), + new ScoredEntry(30D, 3), + new ScoredEntry(20D, 2), + new ScoredEntry(10D, 1) + ); + } + @Test public void testLexSortedSet() {