From 421bb8f5ba7cc014a6f96a0c0fa5bf1b6d5f5fe3 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Tue, 7 Dec 2010 12:55:23 +0200 Subject: [PATCH] DATAKV-8 + add sort support to RedisTemplate --- .../keyvalue/redis/core/RedisOperations.java | 6 ++ .../keyvalue/redis/core/RedisTemplate.java | 57 ++++++++++++++----- 2 files changed, 49 insertions(+), 14 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 ca2783b05..98fa83b8e 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 @@ -17,10 +17,12 @@ package org.springframework.data.keyvalue.redis.core; import java.util.Collection; import java.util.Date; +import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; import org.springframework.data.keyvalue.redis.connection.DataType; +import org.springframework.data.keyvalue.redis.connection.SortParameters; /** @@ -58,6 +60,10 @@ public interface RedisOperations { Object exec(); + List sort(K key, SortParameters params); + + Long sort(K key, SortParameters params, K destination); + ValueOperations valueOps(); BoundValueOperations forValue(K 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 7caef2f65..3182635a7 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 @@ -34,6 +34,7 @@ import org.springframework.dao.DataAccessException; 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.serializer.RedisSerializer; import org.springframework.data.keyvalue.redis.serializer.SimpleRedisSerializer; import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; @@ -254,7 +255,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation @SuppressWarnings("unchecked") - private > T values(Collection rawValues, Class type) { + private > T deserializeValues(Collection rawValues, Class type) { Collection values = (List.class.isAssignableFrom(type) ? new ArrayList(rawValues.size()) : new LinkedHashSet(rawValues.size())); for (byte[] bs : rawValues) { @@ -267,7 +268,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @SuppressWarnings("unchecked") - private Collection hashValues(Collection rawValues, Class type) { + private Collection deserializeHashValues(Collection rawValues, Class type) { Collection values = (List.class.isAssignableFrom(type) ? new ArrayList(rawValues.size()) : new LinkedHashSet(rawValues.size())); for (byte[] bs : rawValues) { @@ -408,6 +409,34 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public List sort(K key, final SortParameters params) { + final byte[] rawKey = rawKey(key); + + List rawValues = execute(new RedisCallback>() { + @Override + public List doInRedis(RedisConnection connection) { + return connection.sort(rawKey, params); + } + }, true); + + return deserializeValues(rawValues, List.class); + } + + @Override + public Long sort(K key, final SortParameters params, K destination) { + final byte[] rawKey = rawKey(key); + final byte[] rawDestKey = rawKey(destination); + + return execute(new RedisCallback() { + @Override + public Long doInRedis(RedisConnection connection) { + return connection.sort(rawKey, params, rawDestKey); + } + }, true); + } + + // // Value operations // @@ -580,7 +609,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return (List) values(rawValues, List.class); + return (List) deserializeValues(rawValues, List.class); } @Override @@ -770,7 +799,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return execute(new RedisCallback>() { @Override public List doInRedis(RedisConnection connection) { - return values(connection.lRange(rawKey, start, end), List.class); + return deserializeValues(connection.lRange(rawKey, start, end), List.class); } }, true); } @@ -898,7 +927,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -929,7 +958,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -967,7 +996,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -1003,7 +1032,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -1078,7 +1107,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -1092,7 +1121,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -1171,7 +1200,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return values(rawValues, Set.class); + return deserializeValues(rawValues, Set.class); } @Override @@ -1288,7 +1317,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return (Set) hashValues(rawValues, Set.class); + return (Set) deserializeHashValues(rawValues, Set.class); } @Override @@ -1349,7 +1378,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return (List) hashValues(rawValues, List.class); + return (List) deserializeHashValues(rawValues, List.class); } @Override @@ -1378,7 +1407,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); - return (List) hashValues(rawValues, List.class); + return (List) deserializeHashValues(rawValues, List.class); } @Override