diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/RedisHashCommands.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/RedisHashCommands.java index 61abb2809..559e3bf67 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/RedisHashCommands.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/RedisHashCommands.java @@ -32,7 +32,7 @@ public interface RedisHashCommands { public String getValue(); } - Integer hSet(String key, String field, String value); + Boolean hSet(String key, String field, String value); String hGet(String key, String field); diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisConnection.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisConnection.java index 00ff0ea55..9cc25932c 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisConnection.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisConnection.java @@ -317,13 +317,13 @@ public class JedisConnection implements RedisConnection { } @Override - public Integer hSet(String key, String field, String value) { + public Boolean hSet(String key, String field, String value) { try { if (isQueueing()) { transaction.hset(key, field, value); return null; } - return jedis.hset(key, field, value); + return JedisUtils.convertCodeReply(jedis.hset(key, field, value)); } catch (Exception ex) { throw convertJedisAccessException(ex); } diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisUtils.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisUtils.java index ab5dfdf2f..32afd383f 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisUtils.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jedis/JedisUtils.java @@ -95,11 +95,11 @@ public abstract class JedisUtils { } static Map convert(String[] fields, String[] values) { - Map arg = new LinkedHashMap(fields.length); + Map result = new LinkedHashMap(fields.length); for (int i = 0; i < values.length; i++) { - arg.put(fields[i], values[i]); + result.put(fields[i], values[i]); } - return arg; + return result; } } \ No newline at end of file diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisConnection.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisConnection.java index 11c330d44..7625eeb6c 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisConnection.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisConnection.java @@ -17,6 +17,7 @@ package org.springframework.datastore.redis.connection.jredis; import java.util.Arrays; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -694,6 +695,11 @@ public class JredisConnection implements RedisConnection { } } + + // + // Hash commands + // + @Override public Integer zUnionStore(String destKey, Aggregate aggregate, int[] weights, String... sets) { throw new UnsupportedOperationException(); @@ -704,13 +710,90 @@ public class JredisConnection implements RedisConnection { throw new UnsupportedOperationException(); } - - // - // Hash commands - // + @Override + public Boolean hDel(String key, String field) { + try { + return jredis.hdel(key, field); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } @Override - public Integer hSet(String key, String field, String value) { + public Boolean hExists(String key, String field) { + try { + return jredis.hexists(key, field); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public String hGet(String key, String field) { + try { + return JredisUtils.convertToString(jredis.hget(key, field), encoding); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public Set hGetAll(String key) { + try { + return JredisUtils.convert(jredis.hgetall(key), encoding); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public Integer hIncrBy(String key, String field, int delta) { throw new UnsupportedOperationException(); } + + @Override + public Set hKeys(String key) { + try { + return new LinkedHashSet(jredis.hkeys(key)); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public Integer hLen(String key) { + try { + return Integer.valueOf((int) jredis.hlen(key)); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public List hMGet(String key, String... fields) { + throw new UnsupportedOperationException(); + } + + @Override + public void hMSet(String key, String[] fields, String[] values) { + throw new UnsupportedOperationException(); + } + + @Override + public Boolean hSet(String key, String field, String value) { + try { + return jredis.hset(key, field, value); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } + + @Override + public List hVals(String key) { + try { + return JredisUtils.convertToStringCollection(jredis.hvals(key), encoding, List.class); + } catch (RedisException ex) { + throw JredisUtils.convertJredisAccessException(ex); + } + } } \ No newline at end of file diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisUtils.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisUtils.java index d8a9c209f..5e4876161 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisUtils.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/connection/jredis/JredisUtils.java @@ -21,6 +21,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import org.jredis.RedisException; import org.jredis.RedisType; @@ -28,6 +30,8 @@ import org.springframework.dao.DataAccessException; import org.springframework.dao.DataRetrievalFailureException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.datastore.redis.connection.DataType; +import org.springframework.datastore.redis.connection.DefaultEntry; +import org.springframework.datastore.redis.connection.RedisHashCommands.Entry; /** * Helper class featuring methods for JRedis connection handling, providing support for exception translation. @@ -81,4 +85,16 @@ public abstract class JredisUtils { return null; } + + static Set convert(Map map, String encoding) { + Set entries = new LinkedHashSet(map.size()); + try { + for (Map.Entry entry : map.entrySet()) { + entries.add(new DefaultEntry(entry.getKey(), new String(entry.getValue(), encoding))); + } + } catch (UnsupportedEncodingException ex) { + throw new DataRetrievalFailureException("Unsupported encoding " + encoding, ex); + } + return entries; + } } \ No newline at end of file