diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundListOperations.java index f003e29e4..ebca7cc13 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundListOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundListOperations.java @@ -24,6 +24,8 @@ import java.util.List; */ public interface BoundListOperations extends KeyBound { + RedisOperations getOperations(); + List range(int start, int end); void trim(int start, int end); @@ -41,4 +43,6 @@ public interface BoundListOperations extends KeyBound { Integer remove(int i, Object value); V index(int index); + + void set(int index, V value); } 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 f643e32d8..3a9ae4b07 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 @@ -25,12 +25,12 @@ import java.util.Set; */ public interface BoundSetOperations extends KeyBound { + RedisOperations getOperations(); + Set diff(K... keys); void diffAndStore(K destKey, K... keys); - RedisOperations getOperations(); - Set intersect(K... keys); void intersectAndStore(K destKey, K... keys); 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 29f0fd9b3..42e613bb2 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 @@ -47,4 +47,6 @@ public interface ListOperations { List blockingLeftPop(int timeout, K... keys); List blockingRightPop(int timeout, K... keys); + + 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 6506830c6..b232cbe9e 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 @@ -483,6 +483,11 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); } + + @Override + public RedisOperations getOperations() { + return RedisTemplate.this; + } } // @@ -571,7 +576,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation public void intersectAndStore(K key, K destKey, K... keys) { final byte[][] rawKeys = rawKeys(aggregateKeys(key, keys)); final byte[] rawDestKey = rawKey(destKey); - Object rawValues = execute(new RedisCallback() { + execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) { connection.sInterStore(rawDestKey, rawKeys); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java index 8a453d62b..be73bc5e7 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisList.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; -import org.springframework.data.keyvalue.redis.core.ListOperations; +import org.springframework.data.keyvalue.redis.core.BoundListOperations; import org.springframework.data.keyvalue.redis.core.RedisOperations; /** @@ -31,7 +31,7 @@ import org.springframework.data.keyvalue.redis.core.RedisOperations; */ public class DefaultRedisList extends AbstractRedisCollection implements RedisList { - private final ListOperations listOps; + private final BoundListOperations listOps; private class DefaultRedisListIterator extends RedisIterator { @@ -45,24 +45,35 @@ public class DefaultRedisList extends AbstractRedisCollection implements R } } + /** + * Constructs a new DefaultRedisList instance. + * + * @param key + * @param operations + */ public DefaultRedisList(String key, RedisOperations operations) { super(key, operations); - listOps = operations.listOps(); + listOps = operations.forList(key); + } + + public DefaultRedisList(BoundListOperations boundOps) { + super(boundOps.getKey(), boundOps.getOperations()); + listOps = boundOps; } @Override public List range(int start, int end) { - return listOps.range(key, start, end); + return listOps.range(start, end); } @Override public RedisList trim(int start, int end) { - listOps.trim(key, start, end); + listOps.trim(start, end); return this; } private List content() { - return listOps.range(key, 0, -1); + return listOps.range(0, -1); } @Override @@ -72,38 +83,38 @@ public class DefaultRedisList extends AbstractRedisCollection implements R @Override public int size() { - return listOps.length(key); + return listOps.length(); } @Override public boolean add(E value) { - listOps.rightPush(key, value); + listOps.rightPush(value); return true; } @Override public void clear() { - listOps.trim(key, size() + 1, 0); + listOps.trim(size() + 1, 0); } @Override public boolean remove(Object o) { - Integer result = listOps.remove(key, 0, o); + Integer result = listOps.remove(0, o); return (result != null && result.intValue() > 0); } @Override public void add(int index, E element) { if (index == 0) { - listOps.leftPush(key, element); + listOps.leftPush(element); return; } int size = size(); if (index == size()) { - listOps.rightPush(key, element); + listOps.rightPush(element); return; } @@ -121,7 +132,7 @@ public class DefaultRedisList extends AbstractRedisCollection implements R Collection reverseC = CollectionUtils.reverse(c); for (E e : reverseC) { - listOps.leftPush(key, e); + listOps.leftPush(e); } return true; } @@ -130,7 +141,7 @@ public class DefaultRedisList extends AbstractRedisCollection implements R if (index == size()) { for (E e : c) { - listOps.rightPush(key, e); + listOps.rightPush(e); } return true; } @@ -147,7 +158,7 @@ public class DefaultRedisList extends AbstractRedisCollection implements R if (index < 0 || index > size()) { throw new IndexOutOfBoundsException(); } - return listOps.index(key, index); + return listOps.index(index); } @Override @@ -179,7 +190,7 @@ public class DefaultRedisList extends AbstractRedisCollection implements R @Override public E set(int index, E e) { E object = get(index); - listOps.set(key, index, e); + listOps.set(index, e); return object; } @@ -201,21 +212,21 @@ public class DefaultRedisList extends AbstractRedisCollection implements R @Override public boolean offer(E e) { - listOps.leftPush(key, e); + listOps.leftPush(e); return true; } @Override public E peek() { - E element = listOps.index(key, 0); + E element = listOps.index(0); return (element == null ? null : element); } @Override public E poll() { - E element = listOps.leftPop(key); + E element = listOps.leftPop(); return (element == null ? null : element); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisZSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisZSet.java index f2ae67e9d..476e7daaf 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisZSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/util/DefaultRedisZSet.java @@ -27,7 +27,7 @@ import org.springframework.data.keyvalue.redis.core.RedisOperations; * * @author Costin Leau */ -class DefaultRedisZSet extends AbstractRedisCollection implements RedisZSet { +public class DefaultRedisZSet extends AbstractRedisCollection implements RedisZSet { private final BoundZSetOperations boundZSetOps; private double defaultScore = 1;