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;