]> git.saurik.com Git - redis.git/blobdiff - src/db.c
handled DEL command as a special optimized case for disk store
[redis.git] / src / db.c
index f360607765cbec7fe21371eea58272ad0d6b6d2e..d545345cb9fdf893ad4546f99bfa4b1c8ccb364d 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -205,10 +205,22 @@ void delCommand(redisClient *c) {
     int deleted = 0, j;
 
     for (j = 1; j < c->argc; j++) {
+        if (server.ds_enabled) {
+            lookupKeyRead(c->db,c->argv[j]);
+            /* FIXME: this can be optimized a lot, no real need to load
+             * a possibly huge value. */
+        }
         if (dbDelete(c->db,c->argv[j])) {
             signalModifiedKey(c->db,c->argv[j]);
             server.dirty++;
             deleted++;
+        } else if (server.ds_enabled) {
+            if (cacheKeyMayExist(c->db,c->argv[j]) &&
+                dsExists(c->db,c->argv[j]))
+            {
+                cacheScheduleForFlush(c->db,c->argv[j]);
+                deleted = 1;
+            }
         }
     }
     addReplyLongLong(c,deleted);