summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Yuan <wangyuan21@baidu.com>2021-04-22 13:32:43 +0800
committerOran Agra <oran@redislabs.com>2021-05-03 22:57:00 +0300
commitef64333e6390653e6bbdedf18c60cc3449bbd5a1 (patch)
treeee237b0d0533b815d987ddcf29bc35c3446ce890
parent0851705304f5277c9adac653b423d634ebc5101c (diff)
downloadredis-ef64333e6390653e6bbdedf18c60cc3449bbd5a1.tar.gz
Expire key firstly and then notify keyspace event (#8830)
Modules event subscribers may get wrong things in notifyKeyspaceEvent callback, such as wrong number of keys, or be able to lookup this key. This commit changes the order to be like the one in evict.c. Cleanup: Since we know the key exists (it expires now), db*Delete is sure to return 1, so there's no need to check it's output (misleading). (cherry picked from commit 63acfe4b00b9d3e34a53559f965c0bc44c03db61)
-rw-r--r--src/db.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/db.c b/src/db.c
index ec68c228c..40377ec3f 100644
--- a/src/db.c
+++ b/src/db.c
@@ -1541,14 +1541,17 @@ int expireIfNeeded(redisDb *db, robj *key) {
if (checkClientPauseTimeoutAndReturnIfPaused()) return 1;
/* Delete the key */
+ if (server.lazyfree_lazy_expire) {
+ dbAsyncDelete(db,key);
+ } else {
+ dbSyncDelete(db,key);
+ }
server.stat_expiredkeys++;
propagateExpire(db,key,server.lazyfree_lazy_expire);
notifyKeyspaceEvent(NOTIFY_EXPIRED,
"expired",key,db->id);
- int retval = server.lazyfree_lazy_expire ? dbAsyncDelete(db,key) :
- dbSyncDelete(db,key);
- if (retval) signalModifiedKey(NULL,db,key);
- return retval;
+ signalModifiedKey(NULL,db,key);
+ return 1;
}
/* -----------------------------------------------------------------------------