From dd071ff6c95cbb7427e5f0c3a6ca84e3c672d87a Mon Sep 17 00:00:00 2001 From: "zhaozhao.zz" Date: Wed, 25 Jul 2018 18:13:34 +0800 Subject: [PATCH] optimize flushdb, avoid useless loops --- src/db.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/db.c b/src/db.c index 055af71b..39686f1b 100644 --- a/src/db.c +++ b/src/db.c @@ -329,7 +329,7 @@ robj *dbUnshareStringValue(redisDb *db, robj *key, robj *o) { * database(s). Otherwise -1 is returned in the specific case the * DB number is out of range, and errno is set to EINVAL. */ long long emptyDb(int dbnum, int flags, void(callback)(void*)) { - int j, async = (flags & EMPTYDB_ASYNC); + int async = (flags & EMPTYDB_ASYNC); long long removed = 0; if (dbnum < -1 || dbnum >= server.dbnum) { @@ -337,7 +337,10 @@ long long emptyDb(int dbnum, int flags, void(callback)(void*)) { return -1; } - for (j = 0; j < server.dbnum; j++) { + int j = dbnum == -1 ? 0 : dbnum; + int dbmax = dbnum == -1 ? server.dbnum : dbnum+1; + + for (; j < dbmax; j++) { if (dbnum != -1 && dbnum != j) continue; removed += dictSize(server.db[j].dict); if (async) {