From 67106bc75a0a2d2c9c09866d76726dede0d995ff Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 14 Jun 2016 14:42:31 +0200 Subject: [PATCH] DATAREDIS-510 - Fix caching of null values. We now no longer add empty byte[] as cache value but return null instead. Original pull request: #201. --- .../data/redis/cache/RedisCache.java | 10 ++++-- .../data/redis/cache/RedisCacheTest.java | 33 +++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) 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 c8c5f5296..76071ae80 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCache.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCache.java @@ -686,10 +686,14 @@ public class RedisCache implements Cache { connection.multi(); } - connection.set(element.getKeyBytes(), element.get()); + if (element.get().length == 0) { + connection.del(element.getKeyBytes()); + } else { + connection.set(element.getKeyBytes(), element.get()); - processKeyExpiration(element, connection); - maintainKnownKeys(element, connection); + processKeyExpiration(element, connection); + maintainKnownKeys(element, connection); + } if (!isClusterConnection(connection)) { connection.exec(); 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 9c6d23b2d..5c6dffed3 100644 --- a/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java +++ b/src/test/java/org/springframework/data/redis/cache/RedisCacheTest.java @@ -17,6 +17,7 @@ package org.springframework.data.redis.cache; import static edu.umd.cs.mtc.TestFramework.*; +import static org.hamcrest.core.Is.*; import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.core.IsInstanceOf.*; import static org.hamcrest.core.IsNot.*; @@ -281,6 +282,38 @@ public class RedisCacheTest extends AbstractNativeCacheTest { assertThat(wrapper.get(), equalTo(value)); } + /** + * @see DATAREDIS-510 + */ + @Test + public void cachePutWithNullShouldNotAddStuffToRedis() { + + Object key = getKey(); + Object value = getValue(); + + cache.put(key, null); + + assertThat(cache.get(key), is(nullValue())); + } + + /** + * @see DATAREDIS-510 + */ + @Test + public void cachePutWithNullShouldRemoveKeyIfExists() { + + Object key = getKey(); + Object value = getValue(); + + cache.put(key, value); + + assertThat(cache.get(key).get(), is(equalTo(value))); + + cache.put(key, null); + + assertThat(cache.get(key), is(nullValue())); + } + /** * @see DATAREDIS-443 * @see DATAREDIS-452