The previous behavior was to return -1 if:
1) Existing key but without an expire set.
2) Non existing key.
Now the second case is handled in a different, and TTL will return -2
if the key does not exist at all.
PTTL follows the same behavior as well.
long long expire, ttl = -1;
expire = getExpire(c->db,c->argv[1]);
+ /* If the key does not exist at all, return -2 */
+ if (expire == -1 && lookupKeyRead(c->db,c->argv[1]) == NULL) {
+ addReplyLongLong(c,-2);
+ return;
+ }
+ /* The key exists. Return -1 if it has no expire, or the actual
+ * TTL value otherwise. */
if (expire != -1) {
ttl = expire-mstime();
if (ttl < 0) ttl = -1;
list $a $b
} {somevalue {}}
- test {PTTL returns millisecond time to live} {
+ test {TTL returns tiem to live in seconds} {
+ r del x
+ r setex x 10 somevalue
+ set ttl [r ttl x]
+ assert {$ttl > 8 && $ttl <= 10}
+ }
+
+ test {PTTL returns time to live in milliseconds} {
r del x
r setex x 1 somevalue
set ttl [r pttl x]
assert {$ttl > 900 && $ttl <= 1000}
}
+ test {TTL / PTTL return -1 if key has no expire} {
+ r del x
+ r set x hello
+ list [r ttl x] [r pttl x]
+ } {-1 -1}
+
+ test {TTL / PTTL return -2 if key does not exit} {
+ r del x
+ list [r ttl x] [r pttl x]
+ } {-2 -2}
+
test {Redis should actively expire keys incrementally} {
r flushdb
r psetex key1 500 a