From 19664093754c7a72b4bbfb30a178670a4be4d4ff Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Mon, 10 Jan 2011 13:22:23 +0200 Subject: [PATCH] + add putIfAbsent on Hash operations --- .../keyvalue/redis/core/BoundHashOperations.java | 2 ++ .../redis/core/DefaultBoundHashOperations.java | 5 +++++ .../data/keyvalue/redis/core/HashOperations.java | 2 ++ .../data/keyvalue/redis/core/RedisTemplate.java | 15 +++++++++++++++ 4 files changed, 24 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 a2d5a5f11..951a2f154 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 @@ -36,6 +36,8 @@ public interface BoundHashOperations extends KeyBound { void put(HK key, HV value); + Boolean putIfAbsent(HK key, HV value); + Collection multiGet(Collection keys); void putAll(Map m); 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 d0ef05c01..d7eb1e9ef 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 @@ -89,6 +89,11 @@ class DefaultBoundHashOperations extends DefaultKeyBound implement ops.put(getKey(), key, value); } + @Override + public Boolean putIfAbsent(HK key, HV value) { + return ops.putIfAbsent(getKey(), key, value); + } + @Override public Collection values() { return ops.values(getKey()); 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 fb780fa16..8b17f042e 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 @@ -44,6 +44,8 @@ public interface HashOperations { void put(H key, HK hashKey, HV value); + Boolean putIfAbsent(H key, HK hashKey, HV value); + Collection values(H key); Map entries(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 bcb089c6e..7b887dd24 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 @@ -1606,6 +1606,21 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation }, true); } + @Override + public Boolean putIfAbsent(K key, HK hashKey, HV value) { + final byte[] rawKey = rawKey(key); + final byte[] rawHashKey = rawHashKey(hashKey); + final byte[] rawHashValue = rawHashValue(value); + + return execute(new RedisCallback() { + @Override + public Boolean doInRedis(RedisConnection connection) { + return connection.hSetNX(rawKey, rawHashKey, rawHashValue); + } + }, true); + } + + @SuppressWarnings("unchecked") @Override public List values(K key) {