X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/120b9ba8f82699f1987be17ccde597bcfa9fae46..c15a3887e08d468b96d4313cc19862b5e4b09977:/src/db.c diff --git a/src/db.c b/src/db.c index 8b7dbe0b..ae40d204 100644 --- a/src/db.c +++ b/src/db.c @@ -93,9 +93,7 @@ int dbAdd(redisDb *db, robj *key, robj *val) { } else { sds copy = sdsdup(key->ptr); dictAdd(db->dict, copy, val); - if (server.ds_enabled) { - /* FIXME: remove entry from negative cache */ - } + if (server.ds_enabled) cacheSetKeyMayExist(db,key); return REDIS_OK; } } @@ -106,15 +104,18 @@ int dbAdd(redisDb *db, robj *key, robj *val) { * On update (key already existed) 0 is returned. Otherwise 1. */ int dbReplace(redisDb *db, robj *key, robj *val) { robj *oldval; + int retval; if ((oldval = dictFetchValue(db->dict,key->ptr)) == NULL) { sds copy = sdsdup(key->ptr); dictAdd(db->dict, copy, val); - return 1; + retval = 1; } else { dictReplace(db->dict, key->ptr, val); - return 0; + retval = 0; } + if (server.ds_enabled) cacheSetKeyMayExist(db,key); + return retval; } int dbExists(redisDb *db, robj *key) { @@ -152,10 +153,10 @@ int dbDelete(redisDb *db, robj *key) { /* If diskstore is enabled make sure to awake waiting clients for this key * as it is not really useful to wait for a key already deleted to be * loaded from disk. */ - if (server.ds_enabled) handleClientsBlockedOnSwappedKey(db,key); - - /* FIXME: we should mark this key as non existing on disk in the negative - * cache. */ + if (server.ds_enabled) { + handleClientsBlockedOnSwappedKey(db,key); + cacheSetKeyDoesNotExist(db,key); + } /* Deleting an entry from the expires dict will not free the sds of * the key, because it is shared with the main dictionary. */