mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
expireGenericCommand(): better variable names and a top-comment that describes the function's behavior.
This commit is contained in:
parent
c6bf4a0034
commit
70381bbf82
21
src/db.c
21
src/db.c
@ -518,16 +518,23 @@ int stringObjectEqualsMs(robj *a) {
|
|||||||
return tolower(arg[0]) == 'm' && tolower(arg[1]) == 's' && arg[2] == '\0';
|
return tolower(arg[0]) == 'm' && tolower(arg[1]) == 's' && arg[2] == '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
/* This is the generic command implementation for EXPIRE, PEXPIRE, EXPIREAT
|
||||||
|
* and PEXPIREAT. Because the commad second argument may be relative or absolute
|
||||||
|
* the "basetime" argument is used to signal what the base time is (either 0
|
||||||
|
* for *AT variants of the command, or the current time for relative expires).
|
||||||
|
*
|
||||||
|
* unit is either UNIT_SECONDS or UNIT_MILLISECONDS, and is only used for
|
||||||
|
* the argv[2] parameter. The basetime is always specified in milliesconds. */
|
||||||
|
void expireGenericCommand(redisClient *c, long long basetime, int unit) {
|
||||||
dictEntry *de;
|
dictEntry *de;
|
||||||
robj *key = c->argv[1], *param = c->argv[2];
|
robj *key = c->argv[1], *param = c->argv[2];
|
||||||
long long milliseconds;
|
long long when; /* unix time in milliseconds when the key will expire. */
|
||||||
|
|
||||||
if (getLongLongFromObjectOrReply(c, param, &milliseconds, NULL) != REDIS_OK)
|
if (getLongLongFromObjectOrReply(c, param, &when, NULL) != REDIS_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (unit == UNIT_SECONDS) milliseconds *= 1000;
|
if (unit == UNIT_SECONDS) when *= 1000;
|
||||||
milliseconds += offset;
|
when += basetime;
|
||||||
|
|
||||||
de = dictFind(c->db->dict,key->ptr);
|
de = dictFind(c->db->dict,key->ptr);
|
||||||
if (de == NULL) {
|
if (de == NULL) {
|
||||||
@ -540,7 +547,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
|||||||
*
|
*
|
||||||
* Instead we take the other branch of the IF statement setting an expire
|
* Instead we take the other branch of the IF statement setting an expire
|
||||||
* (possibly in the past) and wait for an explicit DEL from the master. */
|
* (possibly in the past) and wait for an explicit DEL from the master. */
|
||||||
if (milliseconds <= mstime() && !server.loading && !server.masterhost) {
|
if (when <= mstime() && !server.loading && !server.masterhost) {
|
||||||
robj *aux;
|
robj *aux;
|
||||||
|
|
||||||
redisAssertWithInfo(c,key,dbDelete(c->db,key));
|
redisAssertWithInfo(c,key,dbDelete(c->db,key));
|
||||||
@ -554,7 +561,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
|||||||
addReply(c, shared.cone);
|
addReply(c, shared.cone);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
setExpire(c->db,key,milliseconds);
|
setExpire(c->db,key,when);
|
||||||
addReply(c,shared.cone);
|
addReply(c,shared.cone);
|
||||||
signalModifiedKey(c->db,key);
|
signalModifiedKey(c->db,key);
|
||||||
server.dirty++;
|
server.dirty++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user