From aa04e73dbddd48105c2ffe037d05b898297fbec7 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 1 Jun 2015 14:37:00 +0200 Subject: [PATCH] DATAREDIS-402 - RedisCache should not expire known keys in case ttl of element is not set. We now skip defining expire on known keys set in case element is eternal. Original pull request: #141. --- .../springframework/data/redis/cache/RedisCache.java | 6 +++++- .../data/redis/cache/RedisCacheUnitTests.java | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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 0fc28869e..888cd8b1e 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCache.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCache.java @@ -378,8 +378,12 @@ public class RedisCache implements Cache { protected void maintainKnownKeys(RedisCacheElement element, RedisConnection connection) { if (!element.hasKeyPrefix()) { + connection.zAdd(cacheMetadata.getSetOfKnownKeysKey(), 0, element.getKeyBytes()); - connection.expire(cacheMetadata.getSetOfKnownKeysKey(), element.getTimeToLive()); + + if (!element.isEternal()) { + connection.expire(cacheMetadata.getSetOfKnownKeysKey(), element.getTimeToLive()); + } } } diff --git a/src/test/java/org/springframework/data/redis/cache/RedisCacheUnitTests.java b/src/test/java/org/springframework/data/redis/cache/RedisCacheUnitTests.java index 8919e648f..f3c010923 100644 --- a/src/test/java/org/springframework/data/redis/cache/RedisCacheUnitTests.java +++ b/src/test/java/org/springframework/data/redis/cache/RedisCacheUnitTests.java @@ -129,4 +129,16 @@ public class RedisCacheUnitTests { verify(connectionMock, times(1)).eval(any(byte[].class), eq(ReturnType.INTEGER), eq(0), eq((PREFIX + "*").getBytes())); } + + /** + * @see DATAREDIS-402 + */ + @Test + public void putShouldNotExpireKnownKeysSetWhenTtlIsZero() { + + cache = new RedisCache(CACHE_NAME, NO_PREFIX_BYTES, templateSpy, 0L); + cache.put(KEY, VALUE); + + verify(connectionMock, never()).expire(eq(KNOWN_KEYS_SET_NAME_BYTES), anyLong()); + } }