]> git.saurik.com Git - redis.git/commitdiff
allow to set a new EXPIRE of an existing volatile key
authorantirez <antirez@gmail.com>
Tue, 3 Aug 2010 10:26:30 +0000 (12:26 +0200)
committerantirez <antirez@gmail.com>
Tue, 3 Aug 2010 10:26:30 +0000 (12:26 +0200)
src/db.c
src/redis.h

index 6ac2b0d7428ab692cefc756a2f180e5d773d4358..5acda3d5ff065ad26738790d1a523ac2d68e9bc3 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -401,16 +401,13 @@ int removeExpire(redisDb *db, robj *key) {
     }
 }
 
-int setExpire(redisDb *db, robj *key, time_t when) {
+void setExpire(redisDb *db, robj *key, time_t when) {
     dictEntry *de;
 
     /* Reuse the sds from the main dict in the expire dict */
-    redisAssert((de = dictFind(db->dict,key->ptr)) != NULL);
-    if (dictAdd(db->expires,dictGetEntryKey(de),(void*)when) == DICT_ERR) {
-        return 0;
-    } else {
-        return 1;
-    }
+    de = dictFind(db->dict,key->ptr);
+    redisAssert(de != NULL);
+    dictReplace(db->expires,dictGetEntryKey(de),(void*)when);
 }
 
 /* Return the expire time of the specified key, or -1 if no expire
@@ -504,13 +501,10 @@ void expireGenericCommand(redisClient *c, robj *key, robj *param, long offset) {
         return;
     } else {
         time_t when = time(NULL)+seconds;
-        if (setExpire(c->db,key,when)) {
-            addReply(c,shared.cone);
-            touchWatchedKey(c->db,key);
-            server.dirty++;
-        } else {
-            addReply(c,shared.czero);
-        }
+        setExpire(c->db,key,when);
+        addReply(c,shared.cone);
+        touchWatchedKey(c->db,key);
+        server.dirty++;
         return;
     }
 }
index 27520c193b0ac35ec858c710005b1458919b69bc..c211cfb5e9d4bc9d2c20d2187d01a3862a7094f8 100644 (file)
@@ -755,7 +755,7 @@ int removeExpire(redisDb *db, robj *key);
 void propagateExpire(redisDb *db, robj *key);
 int expireIfNeeded(redisDb *db, robj *key);
 time_t getExpire(redisDb *db, robj *key);
-int setExpire(redisDb *db, robj *key, time_t when);
+void setExpire(redisDb *db, robj *key, time_t when);
 robj *lookupKey(redisDb *db, robj *key);
 robj *lookupKeyRead(redisDb *db, robj *key);
 robj *lookupKeyWrite(redisDb *db, robj *key);