diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisConnection.java index fe198f016..558ee4e06 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisConnection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisConnection.java @@ -19,8 +19,9 @@ package org.springframework.data.keyvalue.redis.connection; import org.springframework.data.keyvalue.redis.UncategorizedRedisException; /** - * A connection (session) to a Redis server. - * The methods namings follows as much as possible the Redis conventions. + * A connection to a Redis server. + * + * The methods follow as much as possible the Redis names and conventions. * * @author Costin Leau */ diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/KeyBound.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/KeyBound.java index 38c58ec6d..16f80f5f9 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/KeyBound.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/KeyBound.java @@ -16,16 +16,17 @@ package org.springframework.data.keyvalue.redis.core; /** - * Redis store for a certain key. Useful for creating views into Redis 'collection' types. + * Contract defining the bind of the implementing entity to a Redis 'key'. + * Useful for executing 'bound' operations or operating over Redis 'collection' or 'views'. * * @author Costin Leau */ public interface KeyBound { /** - * Returns the key associated with this store. + * Returns the key associated with this entity. * - * @return + * @return key associated with the implementing entity */ K getKey(); } 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 cd88b4a2b..9bc40c1eb 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 @@ -18,6 +18,7 @@ package org.springframework.data.keyvalue.redis.support.atomic; import java.io.Serializable; import java.util.Collections; +import org.springframework.data.keyvalue.redis.core.KeyBound; import org.springframework.data.keyvalue.redis.core.RedisOperations; import org.springframework.data.keyvalue.redis.core.ValueOperations; @@ -28,7 +29,7 @@ import org.springframework.data.keyvalue.redis.core.ValueOperations; * @see java.util.concurrent.atomic.AtomicInteger * @author Costin Leau */ -public class RedisAtomicInteger extends Number implements Serializable { +public class RedisAtomicInteger extends Number implements Serializable, KeyBound { private final String key; private ValueOperations operations; @@ -58,6 +59,11 @@ public class RedisAtomicInteger extends Number implements Serializable { this.operations.set(redisCounter, initialValue); } + @Override + public String getKey() { + return key; + } + /** * Get the current value. * 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 e24089dfd..05c6b1c4e 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 @@ -18,6 +18,7 @@ package org.springframework.data.keyvalue.redis.support.atomic; import java.io.Serializable; import java.util.Collections; +import org.springframework.data.keyvalue.redis.core.KeyBound; import org.springframework.data.keyvalue.redis.core.RedisOperations; import org.springframework.data.keyvalue.redis.core.ValueOperations; @@ -28,7 +29,7 @@ import org.springframework.data.keyvalue.redis.core.ValueOperations; * @see java.util.concurrent.atomic.AtomicLong * @author Costin Leau */ -public class RedisAtomicLong extends Number implements Serializable { +public class RedisAtomicLong extends Number implements Serializable, KeyBound { private final String key; private ValueOperations operations; @@ -57,6 +58,11 @@ public class RedisAtomicLong extends Number implements Serializable { this.operations.set(redisCounter, initialValue); } + @Override + public String getKey() { + return key; + } + /** * Gets the current value. * @@ -206,7 +212,7 @@ public class RedisAtomicLong extends Number implements Serializable { } public long longValue() { - return (long) get(); + return get(); } public float floatValue() { diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollection.java index 1cd34f7ca..e64bbef93 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollection.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollection.java @@ -21,16 +21,17 @@ import java.util.Collection; import org.springframework.data.keyvalue.redis.core.RedisOperations; /** - * Base implementation for Redis collections. + * Base implementation for {@link RedisCollection}. + * Provides a skeletal implementation. * * @author Costin Leau */ -public abstract class AbstractRedisCollection extends AbstractCollection implements RedisStore { +public abstract class AbstractRedisCollection extends AbstractCollection implements RedisCollection { public static final String ENCODING = "UTF-8"; - protected final String key; - protected final RedisOperations operations; + private final String key; + private final RedisOperations operations; public AbstractRedisCollection(String key, RedisOperations operations) { this.key = key; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/CollectionUtils.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/CollectionUtils.java index 99e95a56e..74ec394b5 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/CollectionUtils.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/CollectionUtils.java @@ -38,10 +38,10 @@ abstract class CollectionUtils { return (List) Arrays.asList(reverse); } - static Collection extractKeys(Collection> stores) { + static Collection extractKeys(Collection stores) { Collection keys = new ArrayList(stores.size()); - for (RedisStore store : stores) { + for (RedisStore store : stores) { keys.add(store.getKey()); } 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 f244a5cac..79e663800 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 @@ -109,7 +109,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re // intersect the set with a non existing one // TODO: find a safer way to clean the set String randomKey = UUID.randomUUID().toString(); - boundSetOps.intersectAndStore(key, Collections.singleton(randomKey)); + boundSetOps.intersectAndStore(getKey(), Collections.singleton(randomKey)); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisCollection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisCollection.java new file mode 100644 index 000000000..a9c559adf --- /dev/null +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisCollection.java @@ -0,0 +1,27 @@ +/* + * 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.support.collections; + +import java.util.Collection; + +/** + * Redis extension for the {@link Collection} contract. + * + * @author Costin Leau + */ +public interface RedisCollection extends RedisStore { + +} diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java index da490e2c7..01034a525 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java @@ -25,7 +25,7 @@ import java.util.concurrent.BlockingDeque; * * @author Costin Leau */ -public interface RedisList extends RedisStore, List, BlockingDeque { +public interface RedisList extends RedisCollection, List, BlockingDeque { List range(long start, long end); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisMap.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisMap.java index c7ac10130..e2b8e422a 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisMap.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisMap.java @@ -23,7 +23,7 @@ import java.util.concurrent.ConcurrentMap; * * @author Costin Leau */ -public interface RedisMap extends RedisStore, ConcurrentMap { +public interface RedisMap extends RedisStore, ConcurrentMap { Long increment(K key, long delta); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java index a38d20280..4803c80e0 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java @@ -24,7 +24,7 @@ import java.util.Set; * * @author Costin Leau */ -public interface RedisSet extends RedisStore, Set { +public interface RedisSet extends RedisCollection, Set { Set intersect(Collection> sets); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisStore.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisStore.java index ac1438106..7701d6282 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisStore.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisStore.java @@ -15,27 +15,23 @@ */ package org.springframework.data.keyvalue.redis.support.collections; +import org.springframework.data.keyvalue.redis.core.KeyBound; import org.springframework.data.keyvalue.redis.core.RedisOperations; - /** - * Basic interface for Redis-based collections. + * Basic interface for Redis-based collections. + * + * Offers access to the {@link RedisOperations} entity + * used for executing commands against the backing store. * * @author Costin Leau */ -public interface RedisStore { - - /** - * Returns the key used by the backing Redis store for this collection. - * - * @return Redis key - */ - K getKey(); +public interface RedisStore extends KeyBound { /** * Returns the underlying Redis operations used by the backing implementation. * * @return operations */ - RedisOperations getOperations(); + RedisOperations getOperations(); } 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 bcc17fe6f..991e3b176 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 @@ -27,7 +27,7 @@ import java.util.SortedSet; * * @author Costin Leau */ -public interface RedisZSet extends RedisStore, Set { +public interface RedisZSet extends RedisCollection, Set { RedisZSet intersectAndStore(String destKey, Collection> sets); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollectionTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollectionTests.java index 519a5fbff..f8a421d6d 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollectionTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisCollectionTests.java @@ -40,8 +40,6 @@ import org.springframework.data.keyvalue.redis.connection.RedisConnection; import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory; import org.springframework.data.keyvalue.redis.core.RedisCallback; import org.springframework.data.keyvalue.redis.core.RedisTemplate; -import org.springframework.data.keyvalue.redis.support.collections.AbstractRedisCollection; -import org.springframework.data.keyvalue.redis.support.collections.RedisStore; /** @@ -65,7 +63,7 @@ public abstract class AbstractRedisCollectionTests { abstract AbstractRedisCollection createCollection(); - abstract RedisStore copyStore(RedisStore store); + abstract RedisStore copyStore(RedisStore store); public AbstractRedisCollectionTests(ObjectFactory factory, RedisTemplate template) { 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 542502325..e8df0bfd2 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 @@ -27,8 +27,6 @@ import java.util.NoSuchElementException; import org.junit.Before; import org.junit.Test; import org.springframework.data.keyvalue.redis.core.RedisTemplate; -import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisList; -import org.springframework.data.keyvalue.redis.support.collections.RedisList; /** * Integration test for RedisList @@ -281,7 +279,7 @@ public abstract class AbstractRedisListTests extends AbstractRedisCollectionT @Test public void testCappedCollection() throws Exception { - RedisList cappedList = new DefaultRedisList(template.forList(collection.key + ":capped"), 1); + RedisList cappedList = new DefaultRedisList(template.forList(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 f60dbed16..741423d6b 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 @@ -43,9 +43,6 @@ import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory import org.springframework.data.keyvalue.redis.core.RedisCallback; import org.springframework.data.keyvalue.redis.core.RedisOperations; import org.springframework.data.keyvalue.redis.core.RedisTemplate; -import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisMap; -import org.springframework.data.keyvalue.redis.support.collections.RedisMap; -import org.springframework.data.keyvalue.redis.support.collections.RedisStore; /** * Integration test for Redis Map. @@ -98,7 +95,7 @@ public abstract class AbstractRedisMapTests { return valueFactory.instance(); } - protected RedisStore copyStore(RedisStore store) { + protected RedisStore copyStore(RedisStore store) { return new DefaultRedisMap(store.getKey(), store.getOperations()); } @@ -158,7 +155,7 @@ public abstract class AbstractRedisMapTests { @Test public void testEquals() { - RedisStore clone = copyStore(map); + RedisStore clone = copyStore(map); assertEquals(clone, map); assertEquals(clone, clone); assertEquals(map, map); @@ -167,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. forHash(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/RedisZSetTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSetTests.java index cffd80f2c..def3af0b5 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSetTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSetTests.java @@ -16,9 +16,6 @@ package org.springframework.data.keyvalue.redis.support.collections; import org.springframework.data.keyvalue.redis.core.RedisTemplate; -import org.springframework.data.keyvalue.redis.support.collections.AbstractRedisCollection; -import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisZSet; -import org.springframework.data.keyvalue.redis.support.collections.RedisStore; /** * Parameterized instance of Redis sorted set tests. @@ -38,7 +35,7 @@ public class RedisZSetTests extends AbstractRedisZSetTest { } @Override - RedisStore copyStore(RedisStore store) { + RedisStore copyStore(RedisStore store) { return new DefaultRedisZSet(store.getKey().toString(), store.getOperations()); }