From d5e99d6afcb7421915c7baa64decdca94b5c3fd2 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 24 Sep 2012 20:56:01 +0300 Subject: [PATCH] add offset/count methods to ZSetOperations DATAREDIS-104 (cherry picked from commit a6a78398ba438bd2123c16f9364f0c195f1cf59d) --- .../redis/core/DefaultZSetOperations.java | 135 ++++++++++++------ .../data/redis/core/ZSetOperations.java | 8 ++ 2 files changed, 101 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java b/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java index 79382b4f2..b93e98aab 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java @@ -33,55 +33,55 @@ class DefaultZSetOperations extends AbstractOperations implements ZS super(template); } - + public Boolean add(final K key, final V value, final double score) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(value); return execute(new RedisCallback() { - + public Boolean doInRedis(RedisConnection connection) { return connection.zAdd(rawKey, score, rawValue); } }, true); } - + public Double incrementScore(K key, V value, final double delta) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(value); return execute(new RedisCallback() { - + public Double doInRedis(RedisConnection connection) { return connection.zIncrBy(rawKey, delta, rawValue); } }, true); } - + public Long intersectAndStore(K key, K otherKey, K destKey) { return intersectAndStore(key, Collections.singleton(otherKey), destKey); } - + public Long intersectAndStore(K key, Collection otherKeys, K destKey) { final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zInterStore(rawDestKey, rawKeys); } }, true); } - + public Set range(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRange(rawKey, start, end); } @@ -90,12 +90,12 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeValues(rawValues); } - + public Set reverseRange(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRevRange(rawKey, start, end); } @@ -104,12 +104,12 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeValues(rawValues); } - + public Set> rangeWithScores(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRangeWithScores(rawKey, start, end); } @@ -118,12 +118,12 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeTupleValues(rawValues); } - + public Set> reverseRangeWithScores(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRevRangeWithScores(rawKey, start, end); } @@ -132,12 +132,12 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeTupleValues(rawValues); } - + public Set rangeByScore(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRangeByScore(rawKey, min, max); } @@ -146,13 +146,25 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeValues(rawValues); } + public Set rangeByScore(K key, final double min, final double max, final long offset, final long count) { + final byte[] rawKey = rawKey(key); + + Set rawValues = execute(new RedisCallback>() { + + public Set doInRedis(RedisConnection connection) { + return connection.zRangeByScore(rawKey, min, max, offset, count); + } + }, true); + + return deserializeValues(rawValues); + } + - public Set reverseRangeByScore(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRevRangeByScore(rawKey, min, max); } @@ -161,12 +173,24 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeValues(rawValues); } - + public Set reverseRangeByScore(K key, final double min, final double max, final long offset, final long count) { + final byte[] rawKey = rawKey(key); + + Set rawValues = execute(new RedisCallback>() { + + public Set doInRedis(RedisConnection connection) { + return connection.zRevRangeByScore(rawKey, min, max, offset, count); + } + }, true); + + return deserializeValues(rawValues); + } + public Set> rangeByScoreWithScores(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRangeByScoreWithScores(rawKey, min, max); } @@ -175,12 +199,25 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeTupleValues(rawValues); } - + public Set> rangeByScoreWithScores(K key, final double min, final double max, final long offset, final long count) { + final byte[] rawKey = rawKey(key); + + Set rawValues = execute(new RedisCallback>() { + + public Set doInRedis(RedisConnection connection) { + return connection.zRangeByScoreWithScores(rawKey, min, max, offset, count); + } + }, true); + + return deserializeTupleValues(rawValues); + } + + public Set> reverseRangeByScoreWithScores(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); Set rawValues = execute(new RedisCallback>() { - + public Set doInRedis(RedisConnection connection) { return connection.zRevRangeByScoreWithScores(rawKey, min, max); @@ -190,13 +227,27 @@ class DefaultZSetOperations extends AbstractOperations implements ZS return deserializeTupleValues(rawValues); } - + public Set> reverseRangeByScoreWithScores(K key, final double min, final double max, final long offset, final long count) { + final byte[] rawKey = rawKey(key); + + Set rawValues = execute(new RedisCallback>() { + + public Set doInRedis(RedisConnection connection) { + return connection.zRevRangeByScoreWithScores(rawKey, min, max, offset, count); + + } + }, true); + + return deserializeTupleValues(rawValues); + } + + public Long rank(K key, Object o) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(o); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { Long zRank = connection.zRank(rawKey, rawValue); return (zRank != null && zRank.longValue() >= 0 ? zRank : null); @@ -204,13 +255,13 @@ class DefaultZSetOperations extends AbstractOperations implements ZS }, true); } - + public Long reverseRank(K key, Object o) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(o); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { Long zRank = connection.zRevRank(rawKey, rawValue); return (zRank != null && zRank.longValue() >= 0 ? zRank : null); @@ -218,89 +269,89 @@ class DefaultZSetOperations extends AbstractOperations implements ZS }, true); } - + public Boolean remove(K key, Object o) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(o); return execute(new RedisCallback() { - + public Boolean doInRedis(RedisConnection connection) { return connection.zRem(rawKey, rawValue); } }, true); } - + public Long removeRange(K key, final long start, final long end) { final byte[] rawKey = rawKey(key); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zRemRange(rawKey, start, end); } }, true); } - + public Long removeRangeByScore(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zRemRangeByScore(rawKey, min, max); } }, true); } - + public Double score(K key, Object o) { final byte[] rawKey = rawKey(key); final byte[] rawValue = rawValue(o); return execute(new RedisCallback() { - + public Double doInRedis(RedisConnection connection) { return connection.zScore(rawKey, rawValue); } }, true); } - + public Long count(K key, final double min, final double max) { final byte[] rawKey = rawKey(key); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zCount(rawKey, min, max); } }, true); } - + public Long size(K key) { final byte[] rawKey = rawKey(key); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zCard(rawKey); } }, true); } - + public Long unionAndStore(K key, K otherKey, K destKey) { return unionAndStore(key, Collections.singleton(otherKey), destKey); } - + public Long unionAndStore(K key, Collection otherKeys, K destKey) { final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); return execute(new RedisCallback() { - + public Long doInRedis(RedisConnection connection) { return connection.zUnionStore(rawDestKey, rawKeys); } diff --git a/src/main/java/org/springframework/data/redis/core/ZSetOperations.java b/src/main/java/org/springframework/data/redis/core/ZSetOperations.java index 4014e4c9e..329aeb158 100644 --- a/src/main/java/org/springframework/data/redis/core/ZSetOperations.java +++ b/src/main/java/org/springframework/data/redis/core/ZSetOperations.java @@ -53,12 +53,20 @@ public interface ZSetOperations { Set rangeByScore(K key, double min, double max); + Set rangeByScore(K key, double min, double max, long offset, long count); + Set reverseRangeByScore(K key, double min, double max); + Set reverseRangeByScore(K key, double min, double max, long offset, long count); + Set> rangeByScoreWithScores(K key, double min, double max); + Set> rangeByScoreWithScores(K key, double min, double max, long offset, long count); + Set> reverseRangeByScoreWithScores(K key, double min, double max); + Set> reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count); + Boolean add(K key, V value, double score); Double incrementScore(K key, V value, double delta);