From e67d06ee6be9c93fe626ad19f11b2d572d58a0ba Mon Sep 17 00:00:00 2001 From: Mingyi Kang Date: Thu, 8 Sep 2022 11:35:25 +0800 Subject: [PATCH] Optimize setGenericCommand(): no need to remove the expiration entry when 'expire' is not NULL (#11244) --- src/t_string.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/t_string.c b/src/t_string.c index 9d7bc44fc..5d1612a20 100644 --- a/src/t_string.c +++ b/src/t_string.c @@ -99,7 +99,8 @@ void setGenericCommand(client *c, int flags, robj *key, robj *val, robj *expire, return; } - setkey_flags |= (flags & OBJ_KEEPTTL) ? SETKEY_KEEPTTL : 0; + /* When expire is not NULL, we avoid deleting the TTL so it can be updated later instead of being deleted and then created again. */ + setkey_flags |= ((flags & OBJ_KEEPTTL) || expire) ? SETKEY_KEEPTTL : 0; setkey_flags |= found ? SETKEY_ALREADY_EXIST : SETKEY_DOESNT_EXIST; setKey(c,c->db,key,val,setkey_flags);