+ add sort support to RedisTemplate
This commit is contained in:
Costin Leau
2010-12-07 12:55:23 +02:00
parent c7ab10481b
commit 421bb8f5ba
2 changed files with 49 additions and 14 deletions

View File

@@ -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<K, V> {
Object exec();
List<V> sort(K key, SortParameters params);
Long sort(K key, SortParameters params, K destination);
ValueOperations<K, V> valueOps();
BoundValueOperations<K, V> forValue(K key);

View File

@@ -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<K, V> extends RedisAccessor implements RedisOperation
@SuppressWarnings("unchecked")
private <T extends Collection<V>> T values(Collection<byte[]> rawValues, Class<? extends Collection> type) {
private <T extends Collection<V>> T deserializeValues(Collection<byte[]> rawValues, Class<? extends Collection> type) {
Collection<V> values = (List.class.isAssignableFrom(type) ? new ArrayList<V>(rawValues.size())
: new LinkedHashSet<V>(rawValues.size()));
for (byte[] bs : rawValues) {
@@ -267,7 +268,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
@SuppressWarnings("unchecked")
private <H> Collection<H> hashValues(Collection<byte[]> rawValues, Class<? extends Collection> type) {
private <H> Collection<H> deserializeHashValues(Collection<byte[]> rawValues, Class<? extends Collection> type) {
Collection<H> values = (List.class.isAssignableFrom(type) ? new ArrayList<H>(rawValues.size())
: new LinkedHashSet<H>(rawValues.size()));
for (byte[] bs : rawValues) {
@@ -408,6 +409,34 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}, true);
}
@Override
public List<V> sort(K key, final SortParameters params) {
final byte[] rawKey = rawKey(key);
List<byte[]> rawValues = execute(new RedisCallback<List<byte[]>>() {
@Override
public List<byte[]> 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<Long>() {
@Override
public Long doInRedis(RedisConnection connection) {
return connection.sort(rawKey, params, rawDestKey);
}
}, true);
}
//
// Value operations
//
@@ -580,7 +609,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return (List<V>) values(rawValues, List.class);
return (List<V>) deserializeValues(rawValues, List.class);
}
@Override
@@ -770,7 +799,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
return execute(new RedisCallback<List<V>>() {
@Override
public List<V> 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<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -929,7 +958,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -967,7 +996,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -1003,7 +1032,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -1078,7 +1107,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -1092,7 +1121,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -1171,7 +1200,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return values(rawValues, Set.class);
return deserializeValues(rawValues, Set.class);
}
@Override
@@ -1288,7 +1317,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return (Set<HK>) hashValues(rawValues, Set.class);
return (Set<HK>) deserializeHashValues(rawValues, Set.class);
}
@Override
@@ -1349,7 +1378,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return (List<HV>) hashValues(rawValues, List.class);
return (List<HV>) deserializeHashValues(rawValues, List.class);
}
@Override
@@ -1378,7 +1407,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
}
}, true);
return (List<HV>) hashValues(rawValues, List.class);
return (List<HV>) deserializeHashValues(rawValues, List.class);
}
@Override