From 4cbf84f89f66d1a4fc7977051c3b703a38999cdf Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 10 Jan 2011 14:03:51 +0200 Subject: [PATCH] + add support for linsert (as left/right push on RedisTemplate) --- .../redis/core/BoundListOperations.java | 5 +++- .../core/DefaultBoundListOperations.java | 10 +++++++ .../keyvalue/redis/core/ListOperations.java | 4 +++ .../keyvalue/redis/core/RedisTemplate.java | 29 ++++++++++++++++++- 4 files changed, 46 insertions(+), 2 deletions(-) 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 ae07bfd48..46d3c9b1c 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 @@ -35,8 +35,12 @@ public interface BoundListOperations extends KeyBound { Long leftPush(V value); + Long leftPush(V pivot, V value); + Long rightPush(V value); + Long rightPush(V pivot, V value); + V leftPop(); V leftPop(long timeout, TimeUnit unit); @@ -50,5 +54,4 @@ public interface BoundListOperations extends KeyBound { V index(long index); void set(long index, V value); - } 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 5793f57ae..040c62f7a 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 @@ -65,6 +65,11 @@ class DefaultBoundListOperations extends DefaultKeyBound implements Bou return ops.leftPush(getKey(), value); } + @Override + public Long leftPush(V pivot, V value) { + return ops.leftPush(getKey(), pivot, value); + } + @Override public Long size() { return ops.size(getKey()); @@ -96,6 +101,11 @@ class DefaultBoundListOperations extends DefaultKeyBound implements Bou return ops.rightPush(getKey(), value); } + @Override + public Long rightPush(V pivot, V value) { + return ops.rightPush(getKey(), pivot, value); + } + @Override public void trim(long start, long end) { ops.trim(getKey(), start, end); 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 ed423f454..8af535037 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 @@ -33,8 +33,12 @@ public interface ListOperations { Long leftPush(K key, V value); + Long leftPush(K key, V pivot, V value); + Long rightPush(K key, V value); + Long rightPush(K key, V pivot, V value); + void set(K key, long index, V value); Long remove(K key, long i, Object value); 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 7b887dd24..d0917d53b 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 @@ -35,6 +35,7 @@ import org.springframework.data.keyvalue.redis.connection.DataType; import org.springframework.data.keyvalue.redis.connection.RedisConnection; import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory; import org.springframework.data.keyvalue.redis.connection.SortParameters; +import org.springframework.data.keyvalue.redis.connection.RedisListCommands.POSITION; import org.springframework.data.keyvalue.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.keyvalue.redis.serializer.RedisSerializer; import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; @@ -927,7 +928,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } - @Override public Long leftPush(K key, V value) { final byte[] rawKey = rawKey(key); @@ -940,6 +940,19 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public Long leftPush(K key, V pivot, V value) { + final byte[] rawKey = rawKey(key); + final byte[] rawPivot = rawValue(pivot); + final byte[] rawValue = rawValue(value); + return execute(new RedisCallback() { + @Override + public Long doInRedis(RedisConnection connection) { + return connection.lInsert(rawKey, POSITION.BEFORE, rawPivot, rawValue); + } + }, true); + } + @Override public Long size(K key) { final byte[] rawKey = rawKey(key); @@ -1008,6 +1021,20 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public Long rightPush(K key, V pivot, V value) { + final byte[] rawKey = rawKey(key); + final byte[] rawPivot = rawValue(pivot); + final byte[] rawValue = rawValue(value); + + return execute(new RedisCallback() { + @Override + public Long doInRedis(RedisConnection connection) { + return connection.lInsert(rawKey, POSITION.AFTER, rawPivot, rawValue); + } + }, true); + } + @Override public V rightPopAndLeftPush(K sourceKey, K destinationKey) { final byte[] rawDestKey = rawKey(destinationKey);