FLUSHALL/FLUSHDB no longer sync on disk. Just increment the dirty counter by the number of elements removed, that will probably trigger a background saving operation

This commit is contained in:
antirez 2009-04-22 01:44:48 +02:00
parent 975a5b6f98
commit ca37e9cde8

12
redis.c
View File

@ -875,13 +875,16 @@ static void initServer() {
} }
/* Empty the whole database */ /* Empty the whole database */
static void emptyDb() { static long long emptyDb() {
int j; int j;
long long removed = 0;
for (j = 0; j < server.dbnum; j++) { for (j = 0; j < server.dbnum; j++) {
removed += dictSize(server.db[j].dict);
dictEmpty(server.db[j].dict); dictEmpty(server.db[j].dict);
dictEmpty(server.db[j].expires); dictEmpty(server.db[j].expires);
} }
return removed;
} }
/* I agree, this is a very rudimental way to load a configuration... /* I agree, this is a very rudimental way to load a configuration...
@ -3038,18 +3041,17 @@ static void sunionstoreCommand(redisClient *c) {
} }
static void flushdbCommand(redisClient *c) { static void flushdbCommand(redisClient *c) {
server.dirty += dictSize(c->db->dict);
dictEmpty(c->db->dict); dictEmpty(c->db->dict);
dictEmpty(c->db->expires); dictEmpty(c->db->expires);
server.dirty++;
addReply(c,shared.ok); addReply(c,shared.ok);
rdbSave(server.dbfilename);
} }
static void flushallCommand(redisClient *c) { static void flushallCommand(redisClient *c) {
emptyDb(); server.dirty += emptyDb();
server.dirty++;
addReply(c,shared.ok); addReply(c,shared.ok);
rdbSave(server.dbfilename); rdbSave(server.dbfilename);
server.dirty++;
} }
redisSortOperation *createSortOperation(int type, robj *pattern) { redisSortOperation *createSortOperation(int type, robj *pattern) {