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()); + } }