From bf66e9eff0cd751610605aa656ee36a3b297bc76 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 10 Jan 2011 13:06:31 +0200 Subject: [PATCH] DATAKV-17 + expose hGetAll on RedisTemplate (as entries() method) --- .../redis/core/BoundHashOperations.java | 1 + .../core/DefaultBoundHashOperations.java | 7 ++++- .../keyvalue/redis/core/HashOperations.java | 2 ++ .../keyvalue/redis/core/RedisTemplate.java | 29 ++++++++++++++++++- 4 files changed, 37 insertions(+), 2 deletions(-) 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 b4aac92f5..269a4c314 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 @@ -48,4 +48,5 @@ public interface BoundHashOperations extends KeyBound { void delete(Object key); + Map entries(); } 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 4ed2aece3..c18dac213 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 @@ -1,5 +1,5 @@ /* - * Copyright 2010 the original author or authors. + * Copyright 2010-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -93,4 +93,9 @@ class DefaultBoundHashOperations extends DefaultKeyBound implement public Collection values() { return ops.values(getKey()); } + + @Override + public Map entries() { + return ops.entries(getKey()); + } } \ No newline at end of file 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 ce9d7608c..54343d455 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 @@ -46,5 +46,7 @@ public interface HashOperations { Collection values(H key); + Map entries(H key); + 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 76d338c7e..36222a0d7 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 @@ -333,6 +333,19 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return values; } + + @SuppressWarnings("unchecked") + private Map deserializeHashMap(Map entries) { + Map map = new LinkedHashMap(entries.size()); + + for (Map.Entry entry : entries.entrySet()) { + map.put((HK) deserializeHashKey(entry.getKey()), (HV) deserializeHashValue(entry.getValue())); + } + + return map; + } + + @SuppressWarnings("unchecked") private Collection deserializeKeys(Collection rawKeys, Class type) { Collection values = (List.class.isAssignableFrom(type) ? new ArrayList(rawKeys.size()) @@ -361,7 +374,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return (String) deserialize(value, stringSerializer); } - @SuppressWarnings( { "unchecked", "unused" }) + @SuppressWarnings( { "unchecked" }) private HK deserializeHashKey(byte[] value) { return (HK) deserialize(value, hashKeySerializer); } @@ -1621,5 +1634,19 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } }, true); } + + @Override + public Map entries(K key) { + final byte[] rawKey = rawKey(key); + + Map entries = execute(new RedisCallback>() { + @Override + public Map doInRedis(RedisConnection connection) { + return connection.hGetAll(rawKey); + } + }, true); + + return deserializeHashMap(entries); + } } } \ No newline at end of file