mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
OBJECT command implemented
This commit is contained in:
parent
f797c7dc17
commit
ece74202bb
39
src/object.c
39
src/object.c
@ -416,3 +416,42 @@ unsigned long estimateObjectIdleTime(robj *o) {
|
|||||||
REDIS_LRU_CLOCK_RESOLUTION;
|
REDIS_LRU_CLOCK_RESOLUTION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is an helper function for the DEBUG command. We need to lookup keys
|
||||||
|
* without any modification of LRU or other parameters. */
|
||||||
|
robj *objectCommandLookup(redisClient *c, robj *key) {
|
||||||
|
dictEntry *de;
|
||||||
|
|
||||||
|
if ((de = dictFind(c->db->dict,key->ptr)) == NULL) return NULL;
|
||||||
|
return (robj*) dictGetEntryVal(de);
|
||||||
|
}
|
||||||
|
|
||||||
|
robj *objectCommandLookupOrReply(redisClient *c, robj *key, robj *reply) {
|
||||||
|
robj *o = objectCommandLookup(c,key);
|
||||||
|
|
||||||
|
if (!o) addReply(c, reply);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Object command allows to inspect the internals of an Redis Object.
|
||||||
|
* Usage: OBJECT <verb> ... arguments ... */
|
||||||
|
void objectCommand(redisClient *c) {
|
||||||
|
robj *o;
|
||||||
|
|
||||||
|
if (!strcasecmp(c->argv[1]->ptr,"refcount") && c->argc == 3) {
|
||||||
|
if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk))
|
||||||
|
== NULL) return;
|
||||||
|
addReplyLongLong(c,o->refcount);
|
||||||
|
} else if (!strcasecmp(c->argv[1]->ptr,"encoding") && c->argc == 3) {
|
||||||
|
if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk))
|
||||||
|
== NULL) return;
|
||||||
|
addReplyBulkCString(c,strEncoding(o->encoding));
|
||||||
|
} else if (!strcasecmp(c->argv[1]->ptr,"idletime") && c->argc == 3) {
|
||||||
|
if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk))
|
||||||
|
== NULL) return;
|
||||||
|
addReplyLongLong(c,estimateObjectIdleTime(o));
|
||||||
|
} else {
|
||||||
|
addReplyError(c,"Syntax error. Try OBJECT (refcount|encoding|idletime)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,8 @@ struct redisCommand redisCommandTable[] = {
|
|||||||
{"cluster",clusterCommand,-2,0,NULL,0,0,0,0,0},
|
{"cluster",clusterCommand,-2,0,NULL,0,0,0,0,0},
|
||||||
{"restore",restoreCommand,4,0,NULL,0,0,0,0,0},
|
{"restore",restoreCommand,4,0,NULL,0,0,0,0,0},
|
||||||
{"migrate",migrateCommand,6,0,NULL,0,0,0,0,0},
|
{"migrate",migrateCommand,6,0,NULL,0,0,0,0,0},
|
||||||
{"dump",dumpCommand,2,0,NULL,0,0,0,0,0}
|
{"dump",dumpCommand,2,0,NULL,0,0,0,0,0},
|
||||||
|
{"object",objectCommand,-2,0,NULL,0,0,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*============================ Utility functions ============================ */
|
/*============================ Utility functions ============================ */
|
||||||
|
@ -1181,6 +1181,7 @@ void clusterCommand(redisClient *c);
|
|||||||
void restoreCommand(redisClient *c);
|
void restoreCommand(redisClient *c);
|
||||||
void migrateCommand(redisClient *c);
|
void migrateCommand(redisClient *c);
|
||||||
void dumpCommand(redisClient *c);
|
void dumpCommand(redisClient *c);
|
||||||
|
void objectCommand(redisClient *c);
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
void *calloc(size_t count, size_t size) __attribute__ ((deprecated));
|
void *calloc(size_t count, size_t size) __attribute__ ((deprecated));
|
||||||
|
Loading…
Reference in New Issue
Block a user