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.
This commit is contained in:
@@ -715,11 +715,14 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
return execute(new RedisCallback<Long>() {
|
||||
|
||||
public Long doInRedis(RedisConnection connection) {
|
||||
Long expire;
|
||||
try {
|
||||
return timeUnit.convert(connection.pTtl(rawKey), TimeUnit.MILLISECONDS);
|
||||
expire = connection.pTtl(rawKey);
|
||||
return expire < 0 ? expire : timeUnit.convert(expire, TimeUnit.MILLISECONDS);
|
||||
} catch (Exception e) {
|
||||
// Driver may not support pTtl or we may be running on Redis 2.4
|
||||
return timeUnit.convert(connection.ttl(rawKey), TimeUnit.SECONDS);
|
||||
expire = connection.ttl(rawKey);
|
||||
return expire < 0 ? expire : timeUnit.convert(expire, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
}, true);
|
||||
|
||||
@@ -530,6 +530,39 @@ public class RedisTemplateTests<K, V> {
|
||||
assertEquals(Long.valueOf(1), redisTemplate.getExpire(key1, TimeUnit.SECONDS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExpireSecondsForKeyDoesNotExist() {
|
||||
final K key1 = keyFactory.instance();
|
||||
Long expire = redisTemplate.getExpire(key1, TimeUnit.SECONDS);
|
||||
assertTrue(expire < 0l);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExpireSecondsForKeyExistButHasNoAssociatedExpire() {
|
||||
final K key1 = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
redisTemplate.boundValueOps(key1).set(value1);
|
||||
Long expire = redisTemplate.getExpire(key1, TimeUnit.SECONDS);
|
||||
assertTrue(expire < 0l);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetExpireMillisForKeyDoesNotExist() {
|
||||
final K key1 = keyFactory.instance();
|
||||
Long expire = redisTemplate.getExpire(key1, TimeUnit.MILLISECONDS);
|
||||
assertTrue(expire < 0l);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExpireMillisForKeyExistButHasNoAssociatedExpire() {
|
||||
final K key1 = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
redisTemplate.boundValueOps(key1).set(value1);
|
||||
Long expire = redisTemplate.getExpire(key1, TimeUnit.MILLISECONDS);
|
||||
assertTrue(expire < 0l);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExpireMillisNotSupported() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user