Skip to content

Commit e64f84b

Browse files
oudbmp911de
authored andcommitted
DATAREDIS-526 - Fix getExpire return value.
getExpire returns now negative values without time unit conversion in case of absent values or values without a TTL set. CLA: 143520151016081625 (Duobiao Ou) Original pull request: #205.
1 parent f5a506c commit e64f84b

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/main/java/org/springframework/data/redis/core/RedisTemplate.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,11 +715,14 @@ public Long getExpire(K key, final TimeUnit timeUnit) {
715715
return execute(new RedisCallback<Long>() {
716716

717717
public Long doInRedis(RedisConnection connection) {
718+
Long expire;
718719
try {
719-
return timeUnit.convert(connection.pTtl(rawKey), TimeUnit.MILLISECONDS);
720+
expire = connection.pTtl(rawKey);
721+
return expire < 0 ? expire : timeUnit.convert(expire, TimeUnit.MILLISECONDS);
720722
} catch (Exception e) {
721723
// Driver may not support pTtl or we may be running on Redis 2.4
722-
return timeUnit.convert(connection.ttl(rawKey), TimeUnit.SECONDS);
724+
expire = connection.ttl(rawKey);
725+
return expire < 0 ? expire : timeUnit.convert(expire, TimeUnit.SECONDS);
723726
}
724727
}
725728
}, true);

src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,39 @@ public void testGetExpireSeconds() {
530530
assertEquals(Long.valueOf(1), redisTemplate.getExpire(key1, TimeUnit.SECONDS));
531531
}
532532

533+
@Test
534+
public void testGetExpireSecondsForKeyDoesNotExist() {
535+
final K key1 = keyFactory.instance();
536+
Long expire = redisTemplate.getExpire(key1, TimeUnit.SECONDS);
537+
assertTrue(expire < 0l);
538+
}
539+
540+
@Test
541+
public void testGetExpireSecondsForKeyExistButHasNoAssociatedExpire() {
542+
final K key1 = keyFactory.instance();
543+
V value1 = valueFactory.instance();
544+
redisTemplate.boundValueOps(key1).set(value1);
545+
Long expire = redisTemplate.getExpire(key1, TimeUnit.SECONDS);
546+
assertTrue(expire < 0l);
547+
}
548+
549+
550+
@Test
551+
public void testGetExpireMillisForKeyDoesNotExist() {
552+
final K key1 = keyFactory.instance();
553+
Long expire = redisTemplate.getExpire(key1, TimeUnit.MILLISECONDS);
554+
assertTrue(expire < 0l);
555+
}
556+
557+
@Test
558+
public void testGetExpireMillisForKeyExistButHasNoAssociatedExpire() {
559+
final K key1 = keyFactory.instance();
560+
V value1 = valueFactory.instance();
561+
redisTemplate.boundValueOps(key1).set(value1);
562+
Long expire = redisTemplate.getExpire(key1, TimeUnit.MILLISECONDS);
563+
assertTrue(expire < 0l);
564+
}
565+
533566
@Test
534567
public void testGetExpireMillisNotSupported() {
535568

0 commit comments

Comments
 (0)