From 2e05ca43b653f785a1753a0997be48d80ed017e3 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Tue, 7 Dec 2010 20:25:53 +0200 Subject: [PATCH 01/12] + hopefully finally finished with the javadocs --- .../keyvalue/redis/connection/DefaultSortParameters.java | 6 +++--- .../redis/connection/jedis/JedisConnectionFactory.java | 4 ++-- .../keyvalue/redis/connection/jedis/package-info.java | 2 +- .../keyvalue/redis/connection/jredis/package-info.java | 2 +- .../springframework/data/keyvalue/redis/package-info.java | 8 ++++++++ .../keyvalue/redis/support/collections/RedisZSet.java | 5 +++-- .../keyvalue/redis/support/collections/package-info.java | 7 ++++--- 7 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/package-info.java diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java index b03c91fef..0098ac36e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java @@ -56,11 +56,11 @@ public class DefaultSortParameters implements SortParameters { * @param order * @param alphabetic */ - public DefaultSortParameters(byte[] by, Range limit, byte[] get, Order order, Boolean alphabetic) { + public DefaultSortParameters(byte[] byPattern, Range limit, byte[] getPattern, Order order, Boolean alphabetic) { super(); - this.byPattern = by; + this.byPattern = byPattern; this.limit = limit; - this.getPattern = get; + this.getPattern = getPattern; this.order = order; this.alphabetic = alphabetic; } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java index 2cb20a879..186229230 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java @@ -59,7 +59,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, /** * Constructs a new JedisConnectionFactory instance. * - * @param hostname + * @param hostName */ public JedisConnectionFactory(String hostName) { Assert.hasText(hostName); @@ -69,7 +69,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, /** * Constructs a new JedisConnectionFactory instance. * - * @param hostname + * @param hostName * @param port */ public JedisConnectionFactory(String hostName, int port) { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java index b1f4bfd97..40ce7c10d 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java @@ -1,5 +1,5 @@ /** - *

Connection package for Jedis library. + * Connection package for Jedis library. */ package org.springframework.data.keyvalue.redis.connection.jedis; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java index 50fad613e..0affe42a0 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java @@ -1,5 +1,5 @@ /** - *

Connection package for JRedis library. + * Connection package for JRedis library. */ package org.springframework.data.keyvalue.redis.connection.jredis; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/package-info.java new file mode 100644 index 000000000..96920cf44 --- /dev/null +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/package-info.java @@ -0,0 +1,8 @@ +/** + * Root package for integrating Redis with Spring concepts. + *

+ * Provides Redis specific exception hierarchy on top of the {@code org.springframework.dao} package. + * + */ +package org.springframework.data.keyvalue.redis; + diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java index 991e3b176..c0b095a84 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java @@ -22,8 +22,9 @@ import java.util.Set; import java.util.SortedSet; /** - * Redis ZSet contract. Acts as a {@link SortedSet} based on the given priorities. Since using a {@link Comparator} - * does not apply, a ZSet implements the {@link SortedSet} methods where applicable. + * Redis ZSet (or sorted set (by weight)). Acts as a {@link SortedSet} based on the given priorities or weights associated with each item. + *

+ * Since using a {@link Comparator} does not apply, a ZSet implements the {@link SortedSet} methods where applicable. * * @author Costin Leau */ diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/package-info.java index 2ecbed194..e00eeab04 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/package-info.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/package-info.java @@ -2,10 +2,11 @@ * Package providing implementations for most of the {@code java.util} collections on top of Redis. *

* For indexed collections, such as {@link java.util.List}, {@link java.util.Queue} or {@link java.util.Deque} - * consider {@link RedisList}.

- * For collections without duplicates the obvious candidate is {@link RedisSet}. Use {@link RedisZSet} if a + * consider {@link org.springframework.data.keyvalue.redis.support.collections.RedisList}.

+ * For collections without duplicates the obvious candidate is {@link org.springframework.data.keyvalue.redis.support.collections.RedisSet}. Use + * {@link org.springframework.data.keyvalue.redis.support.collections.RedisZSet} if a * certain order is required.

- * Lastly, for key/value associations {@link RedisMap} providing a Map-like abstraction on top of a Redis hash. + * Lastly, for key/value associations {@link org.springframework.data.keyvalue.redis.support.collections.RedisMap} providing a Map-like abstraction on top of a Redis hash. */ package org.springframework.data.keyvalue.redis.support.collections; From dbaee10617690cf8019f204109f5ec3286eecca8 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 21:28:49 +0200 Subject: [PATCH 02/12] + renamed methods on template to better convey the meaning --- .../core/DefaultBoundHashOperations.java | 2 +- .../core/DefaultBoundListOperations.java | 2 +- .../redis/core/DefaultBoundSetOperations.java | 2 +- .../core/DefaultBoundValueOperations.java | 2 +- .../core/DefaultBoundZSetOperations.java | 2 +- .../keyvalue/redis/core/RedisTemplate.java | 20 +++++++++---------- .../keyvalue/redis/core/ZSetOperations.java | 8 ++++---- .../support/atomic/RedisAtomicInteger.java | 2 +- .../redis/support/atomic/RedisAtomicLong.java | 2 +- .../support/collections/DefaultRedisList.java | 2 +- .../support/collections/DefaultRedisMap.java | 2 +- .../support/collections/DefaultRedisSet.java | 8 ++++---- .../support/collections/DefaultRedisZSet.java | 6 +++--- .../collections/AbstractRedisListTests.java | 2 +- .../collections/AbstractRedisMapTests.java | 2 +- .../collections/AbstractRedisSetTests.java | 2 +- .../collections/AbstractRedisZSetTest.java | 2 +- 17 files changed, 34 insertions(+), 34 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java index f531d5628..4ed2aece3 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java @@ -36,7 +36,7 @@ class DefaultBoundHashOperations extends DefaultKeyBound implement */ public DefaultBoundHashOperations(H key, RedisOperations operations) { super(key); - this.ops = operations.hashOps(); + this.ops = operations.getHashOps(); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java index c69181acb..5793f57ae 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java @@ -36,7 +36,7 @@ class DefaultBoundListOperations extends DefaultKeyBound implements Bou */ public DefaultBoundListOperations(K key, RedisOperations operations) { super(key); - this.ops = operations.listOps(); + this.ops = operations.getListOps(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java index b2770c0d9..8050abc2b 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java @@ -37,7 +37,7 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun */ DefaultBoundSetOperations(K key, RedisOperations operations) { super(key); - this.ops = operations.setOps(); + this.ops = operations.getSetOps(); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java index 8de451738..3e459ff78 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java @@ -32,7 +32,7 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo */ public DefaultBoundValueOperations(K key, RedisOperations operations) { super(key); - this.ops = operations.valueOps(); + this.ops = operations.getValueOps(); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java index 44740a7c5..412ee6a19 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java @@ -36,7 +36,7 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou */ public DefaultBoundZSetOperations(K key, RedisOperations oeprations) { super(key); - this.ops = oeprations.zSetOps(); + this.ops = oeprations.getZSetOps(); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index bf9231745..acc89699d 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -561,12 +561,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public BoundValueOperations forValue(K key) { + public BoundValueOperations boundValueOps(K key) { return new DefaultBoundValueOperations(key, this); } @Override - public ValueOperations valueOps() { + public ValueOperations getValueOps() { return new DefaultValueOperations(); } @@ -725,12 +725,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public ListOperations listOps() { + public ListOperations getListOps() { return new DefaultListOperations(); } @Override - public BoundListOperations forList(K key) { + public BoundListOperations boundListOps(K key) { return new DefaultBoundListOperations(key, this); } @@ -913,12 +913,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation // @Override - public BoundSetOperations forSet(K key) { + public BoundSetOperations boundSetOps(K key) { return new DefaultBoundSetOperations(key, this); } @Override - public SetOperations setOps() { + public SetOperations getSetOps() { return new DefaultSetOperations(); } @@ -1073,12 +1073,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation // @Override - public BoundZSetOperations forZSet(K key) { + public BoundZSetOperations boundZSetOps(K key) { return new DefaultBoundZSetOperations(key, this); } @Override - public ZSetOperations zSetOps() { + public ZSetOperations getZSetOps() { return new DefaultZSetOperations(); } @@ -1267,12 +1267,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation // @Override - public BoundHashOperations forHash(K key) { + public BoundHashOperations boundHashOps(K key) { return new DefaultBoundHashOperations(key, this); } @Override - public HashOperations hashOps() { + public HashOperations getHashOps() { return new DefaultHashOperations(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java index fe212f78f..9f897e42f 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java @@ -34,10 +34,6 @@ public interface ZSetOperations { Set reverseRange(K key, long start, long end); - void removeRange(K key, long start, long end); - - void removeRangeByScore(K key, double min, double max); - void unionAndStore(K key, K destKey, Collection keys); Boolean add(K key, V value, double score); @@ -50,6 +46,10 @@ public interface ZSetOperations { Boolean remove(K key, Object o); + void removeRange(K key, long start, long end); + + void removeRangeByScore(K key, double min, double max); + Long size(K key); RedisOperations getOperations(); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java index 9bc40c1eb..d2dcb53a7 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java @@ -54,7 +54,7 @@ public class RedisAtomicInteger extends Number implements Serializable, KeyBound */ public RedisAtomicInteger(String redisCounter, RedisOperations operations, int initialValue) { this.key = redisCounter; - this.operations = operations.valueOps(); + this.operations = operations.getValueOps(); this.generalOps = operations; this.operations.set(redisCounter, initialValue); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java index 05c6b1c4e..210504c0b 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java @@ -54,7 +54,7 @@ public class RedisAtomicLong extends Number implements Serializable, KeyBound operations, long initialValue) { this.key = redisCounter; - this.operations = operations.valueOps(); + this.operations = operations.getValueOps(); this.operations.set(redisCounter, initialValue); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisList.java index 7d9072f7a..44a421dc4 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisList.java @@ -67,7 +67,7 @@ public class DefaultRedisList extends AbstractRedisCollection implements R * @param operations */ public DefaultRedisList(String key, RedisOperations operations) { - this(operations.forList(key)); + this(operations.boundListOps(key)); } /** diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisMap.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisMap.java index 649b6d198..e04a53552 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisMap.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisMap.java @@ -67,7 +67,7 @@ public class DefaultRedisMap implements RedisMap { * @param operations */ public DefaultRedisMap(String key, RedisOperations operations) { - this.hashOps = operations.forHash(key); + this.hashOps = operations.boundHashOps(key); } /** diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java index 79e663800..4f00ce4da 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java @@ -53,7 +53,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re */ public DefaultRedisSet(String key, RedisOperations operations) { super(key, operations); - boundSetOps = operations.forSet(key); + boundSetOps = operations.boundSetOps(key); } /** @@ -74,7 +74,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re @Override public RedisSet diffAndStore(String destKey, Collection> sets) { boundSetOps.diffAndStore(destKey, CollectionUtils.extractKeys(sets)); - return new DefaultRedisSet(boundSetOps.getOperations().forSet(destKey)); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } @Override @@ -85,7 +85,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re @Override public RedisSet intersectAndStore(String destKey, Collection> sets) { boundSetOps.intersectAndStore(destKey, CollectionUtils.extractKeys(sets)); - return new DefaultRedisSet(boundSetOps.getOperations().forSet(destKey)); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } @Override @@ -96,7 +96,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re @Override public RedisSet unionAndStore(String destKey, Collection> sets) { boundSetOps.unionAndStore(destKey, CollectionUtils.extractKeys(sets)); - return new DefaultRedisSet(boundSetOps.getOperations().forSet(destKey)); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java index 243a65131..4a51b59e4 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java @@ -64,7 +64,7 @@ public class DefaultRedisZSet extends AbstractRedisCollection implements R */ public DefaultRedisZSet(String key, RedisOperations operations, double defaultScore) { super(key, operations); - boundZSetOps = operations.forZSet(key); + boundZSetOps = operations.boundZSetOps(key); this.defaultScore = defaultScore; } @@ -93,7 +93,7 @@ public class DefaultRedisZSet extends AbstractRedisCollection implements R @Override public RedisZSet intersectAndStore(String destKey, Collection> sets) { boundZSetOps.intersectAndStore(destKey, CollectionUtils.extractKeys(sets)); - return new DefaultRedisZSet(boundZSetOps.getOperations().forZSet(destKey), getDefaultScore()); + return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); } @Override @@ -126,7 +126,7 @@ public class DefaultRedisZSet extends AbstractRedisCollection implements R @Override public RedisZSet unionAndStore(String destKey, Collection> sets) { boundZSetOps.unionAndStore(destKey, CollectionUtils.extractKeys(sets)); - return new DefaultRedisZSet(boundZSetOps.getOperations().forZSet(destKey), getDefaultScore()); + return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); } @Override diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisListTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisListTests.java index e8df0bfd2..f09b3c8c4 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisListTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisListTests.java @@ -279,7 +279,7 @@ public abstract class AbstractRedisListTests extends AbstractRedisCollectionT @Test public void testCappedCollection() throws Exception { - RedisList cappedList = new DefaultRedisList(template.forList(collection.getKey() + ":capped"), 1); + RedisList cappedList = new DefaultRedisList(template.boundListOps(collection.getKey() + ":capped"), 1); T first = getT(); cappedList.offer(first); assertEquals(1, cappedList.size()); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisMapTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisMapTests.java index 741423d6b..24697f57d 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisMapTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisMapTests.java @@ -164,7 +164,7 @@ public abstract class AbstractRedisMapTests { @Test public void testNotEquals() { RedisOperations ops = map.getOperations(); - RedisStore newInstance = new DefaultRedisMap(ops. forHash(map.getKey() + ":new")); + RedisStore newInstance = new DefaultRedisMap(ops. boundHashOps(map.getKey() + ":new")); assertFalse(map.equals(newInstance)); assertFalse(newInstance.equals(map)); } diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java index c8ca6f707..90fa1b059 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java @@ -59,7 +59,7 @@ public abstract class AbstractRedisSetTests extends AbstractRedisCollectionTe } private RedisSet createSetFor(String key) { - return new DefaultRedisSet((BoundSetOperations) set.getOperations().forSet(key)); + return new DefaultRedisSet((BoundSetOperations) set.getOperations().boundSetOps(key)); } @Test diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java index 1e29571d5..f8223047d 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java @@ -183,7 +183,7 @@ public abstract class AbstractRedisZSetTest extends AbstractRedisCollectionTe } private RedisZSet createZSetFor(String key) { - return new DefaultRedisZSet((BoundZSetOperations) zSet.getOperations().forZSet(key)); + return new DefaultRedisZSet((BoundZSetOperations) zSet.getOperations().boundZSetOps(key)); } @Test From 3acb3e9bdebcd1169d59cfee2a774f85ddb5b436 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:10:29 +0200 Subject: [PATCH 03/12] + added javadocs to dedicated ops --- .../keyvalue/redis/core/RedisOperations.java | 82 ++++++++++++++++--- 1 file changed, 72 insertions(+), 10 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java index 7dcbb3ab2..969aa9d28 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java @@ -82,23 +82,85 @@ public interface RedisOperations { Long sort(K key, SortParameters params, K destination); - ValueOperations valueOps(); + // operation types + /** + * Returns the operations performed on simple values (or Strings in Redis terminology). + * + * @return value operations + */ + ValueOperations getValueOps(); - BoundValueOperations forValue(K key); + /** + * Returns the operations performed on simple values (or Strings in Redis terminology) + * bound to the given key. + * + * @param key Redis key + * @return value operations bound to the given key + */ + BoundValueOperations boundValueOps(K key); - ListOperations listOps(); + /** + * Returns the operations performed on list values. + * + * @return list operations + */ + ListOperations getListOps(); - BoundListOperations forList(K key); + /** + * Returns the operations performed on list values bound to the given key. + * + * @param key Redis key + * @return list operations bound to the given key + */ + BoundListOperations boundListOps(K key); - SetOperations setOps(); + /** + * Returns the operations performed on set values. + * + * @return set operations + */ + SetOperations getSetOps(); - BoundSetOperations forSet(K key); + /** + * Returns the operations performed on set values bound to the given key. + * + * @param key Redis key + * @return set operations bound to the given key + */ + BoundSetOperations boundSetOps(K key); - ZSetOperations zSetOps(); + /** + * Returns the operations performed on zset values (also known as sorted sets). + * + * @return zset operations + */ + ZSetOperations getZSetOps(); - BoundZSetOperations forZSet(K key); + /** + * Returns the operations performed on zset values (also known as sorted sets) + * bound to the given key. + * + * @param key Redis key + * @return zset operations bound to the given key. + */ + BoundZSetOperations boundZSetOps(K key); - HashOperations hashOps(); + /** + * Returns the operations performed on hash values. + * + * @param hash key (or field) type + * @param hash value type + * @return hash operations + */ + HashOperations getHashOps(); - BoundHashOperations forHash(K key); + /** + * Returns the operations performed on hash values bound to the given key. + * + * @param hash key (or field) type + * @param hash value type + * @param key Redis key + * @return hash operations bound to the given key. + */ + BoundHashOperations boundHashOps(K key); } \ No newline at end of file From 2a397015d2ee28acd3bfba536f9e644bc88ff107 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:28:08 +0200 Subject: [PATCH 04/12] + add missing getOperation to bound ops interfaces --- .../redis/core/BoundKeyOperations.java | 47 ------------------- .../redis/core/BoundValueOperations.java | 2 + .../core/DefaultBoundValueOperations.java | 5 ++ .../keyvalue/redis/core/ListOperations.java | 2 + .../keyvalue/redis/core/RedisTemplate.java | 19 ++++++-- .../keyvalue/redis/core/SetOperations.java | 3 +- .../keyvalue/redis/core/ValueOperations.java | 2 + 7 files changed, 27 insertions(+), 53 deletions(-) delete mode 100644 spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java deleted file mode 100644 index 69de46eb9..000000000 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.keyvalue.redis.core; - -import java.util.Date; -import java.util.concurrent.TimeUnit; - -import org.springframework.data.keyvalue.redis.connection.DataType; - -/** - * Key operations bound to a certain value. - * - * @author Costin Leau - */ -public interface BoundKeyOperations extends KeyBound { - - Boolean exists(); - - void delete(); - - DataType type(); - - void rename(K newKey); - - Boolean renameIfAbsent(K newKey); - - Boolean expire(long timeout, TimeUnit unit); - - Boolean expireAt(Date date); - - Long getExpire(); - - void persist(); -} diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java index 4e8eb4f6d..e751e3d91 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java @@ -24,6 +24,8 @@ import java.util.concurrent.TimeUnit; */ public interface BoundValueOperations extends KeyBound { + RedisOperations getOperations(); + void set(V value); void set(V value, long timeout, TimeUnit unit); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java index 3e459ff78..67fb2eba1 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java @@ -64,4 +64,9 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo public Boolean setIfAbsent(V value) { return ops.setIfAbsent(getKey(), value); } + + @Override + public RedisOperations getOperations() { + return ops.getOperations(); + } } \ No newline at end of file diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java index 8a7f99707..6f1ebf3c5 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java @@ -49,5 +49,7 @@ public interface ListOperations { V rightPop(K key, long timeout, TimeUnit unit); + void rightPopAndLeftPush(K sourceKey, K destinationKey); + RedisOperations getOperations(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index acc89699d..59d546f1c 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -72,6 +72,12 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation private RedisSerializer hashKeySerializer = new SimpleRedisSerializer(); private RedisSerializer hashValueSerializer = new SimpleRedisSerializer(); + // cache singleton objects (where possible) + private final ValueOperations valueOps = new DefaultValueOperations(); + private final ListOperations listOps = new DefaultListOperations(); + private final SetOperations setOps = new DefaultSetOperations(); + private final ZSetOperations zSetOps = new DefaultZSetOperations(); + /** * Constructs a new RedisTemplate instance. * @@ -567,7 +573,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public ValueOperations getValueOps() { - return new DefaultValueOperations(); + return valueOps; } private class DefaultValueOperations implements ValueOperations { @@ -722,11 +728,16 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); } + + @Override + public RedisOperations getOperations() { + return RedisTemplate.this; + } } @Override public ListOperations getListOps() { - return new DefaultListOperations(); + return listOps; } @Override @@ -919,7 +930,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public SetOperations getSetOps() { - return new DefaultSetOperations(); + return setOps; } private class DefaultSetOperations implements SetOperations { @@ -1079,7 +1090,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @Override public ZSetOperations getZSetOps() { - return new DefaultZSetOperations(); + return zSetOps; } private class DefaultZSetOperations implements ZSetOperations { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java index 08c5a806c..7eb5817c8 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java @@ -30,8 +30,6 @@ public interface SetOperations { void diffAndStore(K key, K destKey, Collection keys); - RedisOperations getOperations(); - Set intersect(K key, Collection keys); void intersectAndStore(K key, K destKey, Collection keys); @@ -50,4 +48,5 @@ public interface SetOperations { Long size(K key); + RedisOperations getOperations(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java index 2a4a41395..a56ed96ce 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java @@ -43,4 +43,6 @@ public interface ValueOperations { Collection multiGet(Collection keys); Long increment(K key, long delta); + + RedisOperations getOperations(); } From 69fb3a996ba796e49b0ab496a1f9a438eae2b417 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:34:25 +0200 Subject: [PATCH 05/12] add rightPopLeftPush to list operations --- .../data/keyvalue/redis/core/ListOperations.java | 2 +- .../data/keyvalue/redis/core/RedisTemplate.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java index 6f1ebf3c5..ed423f454 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java @@ -49,7 +49,7 @@ public interface ListOperations { V rightPop(K key, long timeout, TimeUnit unit); - void rightPopAndLeftPush(K sourceKey, K destinationKey); + V rightPopAndLeftPush(K sourceKey, K destinationKey); RedisOperations getOperations(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 59d546f1c..ff6078d17 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -890,6 +890,18 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public V rightPopAndLeftPush(K sourceKey, K destinationKey) { + final byte[] rawDestKey = rawKey(destinationKey); + + return execute(new ValueDeserializingRedisCallback(sourceKey) { + @Override + protected byte[] inRedis(byte[] rawSourceKey, RedisConnection connection) { + return connection.rPopLPush(rawSourceKey, rawDestKey); + } + }, true); + } + @Override public void set(K key, final long index, V value) { final byte[] rawValue = rawValue(value); From 48d31da0fddd7c702ded872d2ba0fe7163b90994 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:39:53 +0200 Subject: [PATCH 06/12] + add pop to set operations --- .../data/keyvalue/redis/core/BoundSetOperations.java | 2 ++ .../keyvalue/redis/core/DefaultBoundSetOperations.java | 5 +++++ .../data/keyvalue/redis/core/RedisTemplate.java | 10 ++++++++++ .../data/keyvalue/redis/core/SetOperations.java | 2 ++ 4 files changed, 19 insertions(+) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java index e9274e453..944a62ced 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java @@ -48,5 +48,7 @@ public interface BoundSetOperations extends KeyBound { Boolean remove(Object o); + V pop(); + Long size(); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java index 8050abc2b..4db125290 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java @@ -85,6 +85,11 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun return ops.remove(getKey(), o); } + @Override + public V pop() { + return ops.pop(getKey()); + } + @Override public Long size() { return ops.size(getKey()); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index ff6078d17..8ec6bbce1 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -1053,6 +1053,16 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public V pop(K key) { + return execute(new ValueDeserializingRedisCallback(key) { + @Override + protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { + return connection.sPop(rawKey); + } + }, true); + } + @Override public Long size(K key) { final byte[] rawKey = rawKey(key); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java index 7eb5817c8..15d233268 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java @@ -46,6 +46,8 @@ public interface SetOperations { Boolean remove(K key, Object o); + V pop(K key); + Long size(K key); RedisOperations getOperations(); From bd9c8aaa25f707588215f189a00fe0e9540bf141 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:46:45 +0200 Subject: [PATCH 07/12] + add move and random member to set operations --- .../redis/core/BoundSetOperations.java | 4 +++ .../redis/core/DefaultBoundSetOperations.java | 10 ++++++++ .../keyvalue/redis/core/RedisTemplate.java | 25 +++++++++++++++++++ .../keyvalue/redis/core/SetOperations.java | 4 +++ 4 files changed, 43 insertions(+) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java index 944a62ced..35c3773a0 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java @@ -46,6 +46,10 @@ public interface BoundSetOperations extends KeyBound { Set members(); + Boolean move(K destKey, V value); + + V randomMember(); + Boolean remove(Object o); V pop(); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java index 4db125290..2caed3155 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java @@ -80,6 +80,16 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun return ops.members(getKey()); } + @Override + public Boolean move(K destKey, V value) { + return ops.move(getKey(), destKey, value); + } + + @Override + public V randomMember() { + return ops.randomMember(getKey()); + } + @Override public Boolean remove(Object o) { return ops.remove(getKey(), o); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 8ec6bbce1..59387c1f2 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -1041,6 +1041,31 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return deserializeValues(rawValues, Set.class); } + @Override + public Boolean move(K key, K destKey, V value) { + final byte[] rawKey = rawKey(key); + final byte[] rawDestKey = rawKey(destKey); + final byte[] rawValue = rawValue(value); + + return execute(new RedisCallback() { + @Override + public Boolean doInRedis(RedisConnection connection) { + return connection.sMove(rawKey, rawDestKey, rawValue); + } + }, true); + } + + @Override + public V randomMember(K key) { + + return execute(new ValueDeserializingRedisCallback(key) { + @Override + protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { + return connection.randomKey(); + } + }, true); + } + @Override public Boolean remove(K key, Object o) { final byte[] rawKey = rawKey(key); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java index 15d233268..a16e44407 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java @@ -44,6 +44,10 @@ public interface SetOperations { Set members(K key); + Boolean move(K key, K destKey, V value); + + V randomMember(K key); + Boolean remove(K key, Object o); V pop(K key); From 2dc11f550118fc6741d217da090e0597e1d8deb0 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:47:21 +0200 Subject: [PATCH 08/12] + rename diff to differentiate --- .../data/keyvalue/redis/core/DefaultBoundSetOperations.java | 4 ++-- .../data/keyvalue/redis/core/RedisTemplate.java | 4 ++-- .../data/keyvalue/redis/core/SetOperations.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java index 2caed3155..5d0ca9a23 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java @@ -47,12 +47,12 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun @Override public Set diff(Collection keys) { - return ops.diff(getKey(), keys); + return ops.difference(getKey(), keys); } @Override public void diffAndStore(K destKey, Collection keys) { - ops.diffAndStore(getKey(), destKey, keys); + ops.differenceAndStore(getKey(), destKey, keys); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 59387c1f2..9c5bdbf50 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -960,7 +960,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Set diff(final K key, final Collection keys) { + public Set difference(final K key, final Collection keys) { final byte[][] rawKeys = rawKeys(key, keys); Set rawValues = execute(new RedisCallback>() { @Override @@ -973,7 +973,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public void diffAndStore(final K key, K destKey, final Collection keys) { + public void differenceAndStore(final K key, K destKey, final Collection keys) { final byte[][] rawKeys = rawKeys(key, keys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java index a16e44407..6d3e414de 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java @@ -26,9 +26,9 @@ import java.util.Set; */ public interface SetOperations { - Set diff(K key, Collection keys); + Set difference(K key, Collection keys); - void diffAndStore(K key, K destKey, Collection keys); + void differenceAndStore(K key, K destKey, Collection keys); Set intersect(K key, Collection keys); From b7dcfb67a1e4598c876b047c2f50e1785866e939 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:52:45 +0200 Subject: [PATCH 09/12] + add incrementScore to zset operations --- .../keyvalue/redis/core/BoundZSetOperations.java | 2 ++ .../redis/core/DefaultBoundZSetOperations.java | 5 +++++ .../data/keyvalue/redis/core/RedisTemplate.java | 13 +++++++++++++ .../data/keyvalue/redis/core/ZSetOperations.java | 6 ++++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java index e3df62abf..a2cbf9cda 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java @@ -45,6 +45,8 @@ public interface BoundZSetOperations extends KeyBound { Boolean add(V value, double score); + Double incrementScore(V value, double delta); + Long rank(Object o); Long reverseRank(Object o); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java index 412ee6a19..6feec78e0 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java @@ -44,6 +44,11 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou return ops.add(getKey(), value, score); } + @Override + public Double incrementScore(V value, double delta) { + return ops.incrementScore(getKey(), value, delta); + } + @Override public RedisOperations getOperations() { return ops.getOperations(); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 9c5bdbf50..acbcff420 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -1155,6 +1155,19 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public Double incrementScore(K key, V value, final double delta) { + final byte[] rawKey = rawKey(key); + final byte[] rawValue = rawValue(value); + + return execute(new RedisCallback() { + @Override + public Double doInRedis(RedisConnection connection) { + return connection.zIncrBy(rawKey, delta, rawValue); + } + }, true); + } + @Override public RedisOperations getOperations() { return RedisTemplate.this; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java index 9f897e42f..0b65fb011 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java @@ -28,16 +28,18 @@ public interface ZSetOperations { void intersectAndStore(K key, K destKey, Collection keys); + void unionAndStore(K key, K destKey, Collection keys); + Set range(K key, long start, long end); Set rangeByScore(K key, double min, double max); Set reverseRange(K key, long start, long end); - void unionAndStore(K key, K destKey, Collection keys); - Boolean add(K key, V value, double score); + Double incrementScore(K key, V value, double delta); + Long rank(K key, Object o); Long reverseRank(K key, Object o); From 48b9df3a05ecf71993b7824bb7fecf1713d7bcb4 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 22:55:54 +0200 Subject: [PATCH 10/12] rename exists to hasKey() --- .../data/keyvalue/redis/core/RedisOperations.java | 2 +- .../springframework/data/keyvalue/redis/core/RedisTemplate.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java index 969aa9d28..cc9dd0347 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java @@ -50,7 +50,7 @@ public interface RedisOperations { */ T execute(RedisCallback action); - Boolean exists(K key); + Boolean hasKey(K key); void delete(Collection key); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index acbcff420..f8e7b036a 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -407,7 +407,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Boolean exists(K key) { + public Boolean hasKey(K key) { final byte[] rawKey = rawKey(key); return execute(new RedisCallback() { From f18fffa4ee82cde20517d5c479b813daac05c689 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 23:02:28 +0200 Subject: [PATCH 11/12] + add discard and unwatch operations --- .../keyvalue/redis/core/RedisOperations.java | 4 + .../keyvalue/redis/core/RedisTemplate.java | 75 +++++++++++++------ 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java index cc9dd0347..a682170d2 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java @@ -74,8 +74,12 @@ public interface RedisOperations { void watch(Collection keys); + void unwatch(); + void multi(); + void discard(); + Object exec(); List sort(K key, SortParameters params); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index f8e7b036a..2c3f600e5 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -382,6 +382,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation // RedisOperations // + @Override public Object exec() { return execute(new RedisCallback() { @@ -566,6 +567,57 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public void multi() { + execute(new RedisCallback() { + @Override + public Object doInRedis(RedisConnection connection) throws DataAccessException { + connection.multi(); + return null; + } + }, true); + } + + @Override + public void discard() { + execute(new RedisCallback() { + + @Override + public Object doInRedis(RedisConnection connection) throws DataAccessException { + connection.discard(); + return null; + } + }, true); + } + + @Override + public void watch(Collection keys) { + final byte[][] rawKeys = rawKeys(keys); + + execute(new RedisCallback() { + @Override + public Object doInRedis(RedisConnection connection) { + connection.watch(rawKeys); + return null; + } + }, true); + } + + @Override + public void unwatch() { + execute(new RedisCallback() { + @Override + public Object doInRedis(RedisConnection connection) throws DataAccessException { + connection.unwatch(); + return null; + } + }, true); + } + + // + // Value Ops + // + @Override public BoundValueOperations boundValueOps(K key) { return new DefaultBoundValueOperations(key, this); @@ -746,29 +798,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } - @Override - public void multi() { - execute(new RedisCallback() { - @Override - public Object doInRedis(RedisConnection connection) throws DataAccessException { - connection.multi(); - return null; - } - }, true); - } - @Override - public void watch(Collection keys) { - final byte[][] rawKeys = rawKeys(keys); - - execute(new RedisCallback() { - @Override - public Object doInRedis(RedisConnection connection) { - connection.watch(rawKeys); - return null; - } - }, true); - } // // List operations @@ -809,7 +839,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } - @Override public Long leftPush(K key, V value) { final byte[] rawKey = rawKey(key); From ea20533a370763488c16ab72422b69a5ad7a0050 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 8 Dec 2010 23:23:59 +0200 Subject: [PATCH 12/12] + add append and substract operations --- .../redis/connection/RedisStringCommands.java | 2 +- .../connection/jedis/JedisConnection.java | 2 +- .../connection/jredis/JredisConnection.java | 2 +- .../redis/core/BoundValueOperations.java | 4 ++ .../core/DefaultBoundValueOperations.java | 10 ++++ .../keyvalue/redis/core/RedisTemplate.java | 49 +++++++++++++++++++ .../keyvalue/redis/core/ValueOperations.java | 4 ++ 7 files changed, 70 insertions(+), 3 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java index 757dd1ba9..1f70a8210 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java @@ -52,5 +52,5 @@ public interface RedisStringCommands { Long append(byte[] key, byte[] value); - byte[] substr(byte[] key, long start, long end); + byte[] substr(byte[] key, int start, int end); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java index b50bf7e67..bff80afef 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java @@ -499,7 +499,7 @@ public class JedisConnection implements RedisConnection { } @Override - public byte[] substr(byte[] key, long start, long end) { + public byte[] substr(byte[] key, int start, int end) { try { if (isQueueing()) { transaction.substr(key, (int) start, (int) end); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java index 1fa82e638..1d598bd7d 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java @@ -330,7 +330,7 @@ public class JredisConnection implements RedisConnection { } @Override - public byte[] substr(byte[] key, long start, long end) { + public byte[] substr(byte[] key, int start, int end) { try { return jredis.substr(JredisUtils.decode(key), start, end); } catch (RedisException ex) { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java index e751e3d91..42e5866ba 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java @@ -38,4 +38,8 @@ public interface BoundValueOperations extends KeyBound { Long increment(long delta); + Integer append(String value); + + String substract(int start, int end); + } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java index 67fb2eba1..8d8256ab3 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java @@ -50,6 +50,16 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo return ops.increment(getKey(), delta); } + @Override + public Integer append(String value) { + return ops.append(getKey(), value); + } + + @Override + public String substract(int start, int end) { + return ops.substract(getKey(), start, end); + } + @Override public void set(V value, long timeout, TimeUnit unit) { ops.set(getKey(), value, timeout, unit); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 2c3f600e5..314dfdc65 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -71,6 +71,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation private RedisSerializer valueSerializer = new SimpleRedisSerializer(); private RedisSerializer hashKeySerializer = new SimpleRedisSerializer(); private RedisSerializer hashValueSerializer = new SimpleRedisSerializer(); + private RedisSerializer stringSerializer = new StringRedisSerializer(); // cache singleton objects (where possible) private final ValueOperations valueOps = new DefaultValueOperations(); @@ -205,6 +206,16 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation this.hashValueSerializer = hashValueSerializer; } + /** + * Sets the string value serializer to be used by this template (when the arguments or return types + * are always strings). Defaults to {@link StringRedisSerializer}. + * + * @see ValueOperations#substract(Object, int, int) + * @param stringSerializer The stringValueSerializer to set. + */ + public void setStringSerializer(RedisSerializer stringSerializer) { + this.stringSerializer = stringSerializer; + } /** * Invocation handler that suppresses close calls on JDO PersistenceManagers. @@ -250,6 +261,11 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return (key != null ? keySerializer.serialize(key) : null); } + @SuppressWarnings("unchecked") + private byte[] rawString(String key) { + return (key != null ? stringSerializer.serialize(key) : null); + } + @SuppressWarnings("unchecked") private byte[] rawValue(T value) { return (value != null ? valueSerializer.serialize(value) : null); @@ -339,6 +355,11 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return (V) deserialize(value, valueSerializer); } + @SuppressWarnings("unchecked") + private String deserializeString(byte[] value) { + return (String) deserialize(value, stringSerializer); + } + @SuppressWarnings( { "unchecked", "unused" }) private HK deserializeHashKey(byte[] value) { return (HK) deserialize(value, hashKeySerializer); @@ -356,6 +377,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return serializer.deserialize(value); } + private static boolean isEmpty(byte[] data) { return (data == null || data.length == 0); } @@ -676,6 +698,33 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public Integer append(K key, String value) { + final byte[] rawKey = rawKey(key); + final byte[] rawString = rawString(value); + + return execute(new RedisCallback() { + @Override + public Integer doInRedis(RedisConnection connection) { + return connection.append(rawKey, rawString).intValue(); + } + }, true); + } + + @Override + public String substract(K key, final int start, final int end) { + final byte[] rawKey = rawKey(key); + + byte[] rawReturn = execute(new RedisCallback() { + @Override + public byte[] doInRedis(RedisConnection connection) { + return connection.substr(rawKey, start, end); + } + }, true); + + return deserializeString(rawReturn); + } + @Override public Collection multiGet(Collection keys) { if (keys.isEmpty()) { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java index a56ed96ce..6882019e3 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ValueOperations.java @@ -44,5 +44,9 @@ public interface ValueOperations { Long increment(K key, long delta); + Integer append(K key, String value); + + String substract(K key, int start, int end); + RedisOperations getOperations(); }