From 89e689c592837b7af30259d0d1432ed7faef92ee Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 10 May 2010 15:26:01 +0200 Subject: [PATCH] while loading the rdb file don't add the key to the dictionary at all if it's already expired, instead of removing it just after the insertion. --- redis.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/redis.c b/redis.c index 4c68d692..b1035efc 100644 --- a/redis.c +++ b/redis.c @@ -3999,6 +3999,12 @@ static int rdbLoad(char *filename) { if ((key = rdbLoadStringObject(fp)) == NULL) goto eoferr; /* Read value */ if ((val = rdbLoadObject(type,fp)) == NULL) goto eoferr; + /* Check if the key already expired */ + if (expiretime != -1 && expiretime < now) { + decrRefCount(key); + decrRefCount(val); + continue; + } /* Add the new object in the hash table */ retval = dictAdd(d,key,val); if (retval == DICT_ERR) { @@ -4007,14 +4013,7 @@ static int rdbLoad(char *filename) { } loadedkeys++; /* Set the expire time if needed */ - if (expiretime != -1) { - setExpire(db,key,expiretime); - /* Delete this key if already expired */ - if (expiretime < now) { - deleteKey(db,key); - continue; /* don't try to swap this out */ - } - } + if (expiretime != -1) setExpire(db,key,expiretime); /* Handle swapping while loading big datasets when VM is on */