EXPIRE should not resurrect keys. Issue #1026.
This commit is contained in:
parent
601cea665d
commit
140260409e
6
src/db.c
6
src/db.c
@ -562,7 +562,6 @@ int expireIfNeeded(redisDb *db, robj *key) {
|
|||||||
* unit is either UNIT_SECONDS or UNIT_MILLISECONDS, and is only used for
|
* unit is either UNIT_SECONDS or UNIT_MILLISECONDS, and is only used for
|
||||||
* the argv[2] parameter. The basetime is always specified in milliseconds. */
|
* the argv[2] parameter. The basetime is always specified in milliseconds. */
|
||||||
void expireGenericCommand(redisClient *c, long long basetime, int unit) {
|
void expireGenericCommand(redisClient *c, long long basetime, int unit) {
|
||||||
dictEntry *de;
|
|
||||||
robj *key = c->argv[1], *param = c->argv[2];
|
robj *key = c->argv[1], *param = c->argv[2];
|
||||||
long long when; /* unix time in milliseconds when the key will expire. */
|
long long when; /* unix time in milliseconds when the key will expire. */
|
||||||
|
|
||||||
@ -572,11 +571,12 @@ void expireGenericCommand(redisClient *c, long long basetime, int unit) {
|
|||||||
if (unit == UNIT_SECONDS) when *= 1000;
|
if (unit == UNIT_SECONDS) when *= 1000;
|
||||||
when += basetime;
|
when += basetime;
|
||||||
|
|
||||||
de = dictFind(c->db->dict,key->ptr);
|
/* No key, return zero. */
|
||||||
if (de == NULL) {
|
if (lookupKeyRead(c->db,key) == NULL) {
|
||||||
addReply(c,shared.czero);
|
addReply(c,shared.czero);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EXPIRE with negative TTL, or EXPIREAT with a timestamp into the past
|
/* EXPIRE with negative TTL, or EXPIREAT with a timestamp into the past
|
||||||
* should never be executed as a DEL when load the AOF or in the context
|
* should never be executed as a DEL when load the AOF or in the context
|
||||||
* of a slave instance.
|
* of a slave instance.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user