From 9f5d7d44c7be3b6c91764dcc0268aaaec16b0387 Mon Sep 17 00:00:00 2001 From: John Sully Date: Wed, 18 Dec 2019 00:10:05 -0500 Subject: [PATCH] Implement subkey expires for sorted sets Former-commit-id: a45d141597e56b3e0e580d545122af4272692a1e --- src/expire.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/expire.cpp b/src/expire.cpp index 4cb1959ad..b311a5673 100644 --- a/src/expire.cpp +++ b/src/expire.cpp @@ -111,8 +111,17 @@ void activeExpireCycleExpire(redisDb *db, expireEntry &e, long long now) { } break; - case OBJ_LIST: case OBJ_ZSET: + if (zsetDel(val,(sds)pfat->nextExpireEntry().spsubkey.get())) { + deleted++; + if (zsetLength(val) == 0) { + activeExpireCycleExpireFullKey(db, e.key()); + return; + } + } + break; + + case OBJ_LIST: default: serverAssert(false); } @@ -171,6 +180,7 @@ void expireMemberCore(client *c, robj *key, robj *subkey, long long basetime, lo return; } + double dblT; switch (val->type) { case OBJ_SET: @@ -187,6 +197,13 @@ void expireMemberCore(client *c, robj *key, robj *subkey, long long basetime, lo } break; + case OBJ_ZSET: + if (zsetScore(val, szFromObj(subkey), &dblT) == C_ERR) { + addReply(c,shared.czero); + return; + } + break; + default: addReplyError(c, "object type is unsupported"); return;