X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/ef59a8bc9ef426f9d24e701e9b73a6a03ddd3d0f..e9bc56dbed149a29e031debc27bf25f2db991cc7:/src/db.c diff --git a/src/db.c b/src/db.c index c1ce79b5..aa1c14ad 100644 --- a/src/db.c +++ b/src/db.c @@ -11,8 +11,11 @@ robj *lookupKey(redisDb *db, robj *key) { if (de) { robj *val = dictGetEntryVal(de); - /* Update the access time for the aging algorithm. */ - val->lru = server.lruclock; + /* Update the access time for the aging algorithm. + * Don't do it if we have a saving child, as this will trigger + * a copy on write madness. */ + if (server.bgsavechildpid == -1 && server.bgrewritechildpid == -1) + val->lru = server.lruclock; if (server.vm_enabled) { if (val->storage == REDIS_VM_MEMORY || @@ -34,8 +37,10 @@ robj *lookupKey(redisDb *db, robj *key) { if (notify) handleClientsBlockedOnSwappedKey(db,key); } } + server.stat_keyspace_hits++; return val; } else { + server.stat_keyspace_misses++; return NULL; } } @@ -430,16 +435,14 @@ time_t getExpire(redisDb *db, robj *key) { * will be consistent even if we allow write operations against expiring * keys. */ void propagateExpire(redisDb *db, robj *key) { - struct redisCommand *cmd; robj *argv[2]; - cmd = lookupCommand("del"); argv[0] = createStringObject("DEL",3); argv[1] = key; incrRefCount(key); if (server.appendonly) - feedAppendOnlyFile(cmd,db->id,argv,2); + feedAppendOnlyFile(server.delCommand,db->id,argv,2); if (listLength(server.slaves)) replicationFeedSlaves(server.slaves,db->id,argv,2); @@ -468,7 +471,6 @@ int expireIfNeeded(redisDb *db, robj *key) { /* Delete the key */ server.stat_expiredkeys++; - server.dirty++; propagateExpire(db,key); return dbDelete(db,key); }