diff --git a/src/main/java/org/springframework/data/redis/cache/RedisCache.java b/src/main/java/org/springframework/data/redis/cache/RedisCache.java index 4a34ba4d6..adcc88e65 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCache.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCache.java @@ -614,7 +614,7 @@ public class RedisCache implements Cache { boolean valueWasSet = connection.setNX(element.getKeyBytes(), valueAccessor.convertToBytesIfNecessary(element.get())); - return valueWasSet ? element.get() : valueAccessor.deserializeIfNecessary(connection.get(element.getKeyBytes())); + return valueWasSet ? null : valueAccessor.deserializeIfNecessary(connection.get(element.getKeyBytes())); } } diff --git a/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java b/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java index 7d8999471..4612df976 100644 --- a/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java +++ b/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java @@ -250,6 +250,7 @@ public class RedisCacheTest extends AbstractNativeCacheTest { /** * @see DATAREDIS-344 + * @see DATAREDIS-416 */ @Test public void putIfAbsentShouldSetValueOnlyIfNotPresent() { @@ -262,16 +263,15 @@ public class RedisCacheTest extends AbstractNativeCacheTest { template.delete(key); Object value = getValue(); + + assertThat(redisCache.putIfAbsent(key, value), nullValue()); + ValueWrapper wrapper = redisCache.putIfAbsent(key, value); - assertThat(wrapper.get(), sameInstance(value)); - - ValueWrapper wrapper2 = redisCache.putIfAbsent(key, value); - if (!(value instanceof Number)) { - assertThat(wrapper2.get(), not(sameInstance(value))); + assertThat(wrapper.get(), not(sameInstance(value))); } - assertThat(wrapper2.get(), equalTo(value)); + assertThat(wrapper.get(), equalTo(value)); } }