Add millisecond support for EXPIREMEMBER command

Former-commit-id: 6e6cd84ad7dc9e5763ab36668cbbf8ca6743f8d9
This commit is contained in:
John Sully 2019-10-13 12:57:50 -04:00
parent e57d2e24c9
commit 650085d61a
3 changed files with 34 additions and 4 deletions

View File

@ -130,13 +130,43 @@ void activeExpireCycleExpire(redisDb *db, expireEntry &e, long long now) {
}
}
int parseUnitString(const char *sz)
{
if (strcasecmp(sz, "s") == 0)
return UNIT_SECONDS;
if (strcasecmp(sz, "ms") == 0)
return UNIT_MILLISECONDS;
return -1;
}
void expireMemberCommand(client *c)
{
long long when;
if (getLongLongFromObjectOrReply(c, c->argv[3], &when, NULL) != C_OK)
return;
if (c->argc > 5) {
addReplyError(c, "Invalid number of arguments");
return;
}
int unit = UNIT_SECONDS;
if (c->argc == 5) {
unit = parseUnitString(szFromObj(c->argv[4]));
}
switch (unit)
{
case UNIT_SECONDS:
when *= 1000;
case UNIT_MILLISECONDS:
break;
default:
addReplyError(c, "Invalid unit arg");
return;
}
when += mstime();
/* No key, return zero. */

View File

@ -344,8 +344,8 @@ struct commandHelp {
0,
"1.2.0" },
{ "EXPIREMEMBER",
"key subkey seconds",
"set a subkey's time to live in seconds"},
"key subkey delay [Unit: s,ms]",
"set a subkey's time to live in seconds (or milliseconds)"},
{ "FLUSHALL",
"[ASYNC]",
"Remove all keys from all databases",

View File

@ -623,7 +623,7 @@ struct redisCommand redisCommandTable[] = {
"write fast @keyspace",
0,NULL,1,1,1,0,0,0},
{"expiremember", expireMemberCommand, 4,
{"expiremember", expireMemberCommand, -4,
"write fast @keyspace",
0,NULL,1,1,1,0,0,0},