From 6d35c3f1d929f206b7dfa0858cf0cefaddf09db1 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 29 Nov 2010 21:50:01 +0200 Subject: [PATCH] + add multiGet to hash operations + template --- .../redis/core/BoundHashOperations.java | 3 +++ .../core/DefaultBoundHashOperations.java | 5 ++++ .../keyvalue/redis/core/HashOperations.java | 2 ++ .../keyvalue/redis/core/RedisTemplate.java | 27 +++++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundHashOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundHashOperations.java index b0f71960d..19ddc0966 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundHashOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundHashOperations.java @@ -34,6 +34,8 @@ public interface BoundHashOperations extends KeyBound { void set(HK key, HV value); + Collection multiGet(Set keys); + void multiSet(Map m); Set keys(); @@ -43,4 +45,5 @@ public interface BoundHashOperations extends KeyBound { Integer length(); void delete(Object key); + } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java index 8387c45be..c7870393c 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java @@ -49,6 +49,11 @@ class DefaultBoundHashOperations extends DefaultKeyBound implement return ops.get(getKey(), key); } + @Override + public Collection multiGet(Set hashKeys) { + return ops.multiGet(getKey(), hashKeys); + } + @Override public RedisOperations getOperations() { return ops.getOperations(); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/HashOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/HashOperations.java index 23755be71..213d4550d 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/HashOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/HashOperations.java @@ -32,6 +32,8 @@ public interface HashOperations { HV get(H key, Object hashKey); + Collection multiGet(H key, Set hashKeys); + Integer increment(H key, HK hashKey, int delta); Set keys(H 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 7a7687398..29b1b5336 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 @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -1039,6 +1040,32 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + + @Override + public Collection multiGet(K key, Set fields) { + if (fields.isEmpty()) { + return Collections.emptyList(); + } + + final byte[] rawKey = rawKey(key); + + final byte[][] rawHashKeys = new byte[fields.size()][]; + + int counter = 0; + for (HK hashKey : fields) { + rawHashKeys[counter++] = rawHashKey(hashKey); + } + + List rawValues = execute(new RedisCallback>() { + @Override + public List doInRedis(RedisConnection connection) { + return connection.hMGet(rawKey, rawHashKeys); + } + }, true); + + return (List) hashValues(rawValues, List.class); + } + @Override public void set(K key, HK hashKey, HV value) { final byte[] rawKey = rawKey(key);