Exemple #1
0
/* 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) {
        lockKey(c,c->argv[2]);
        if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk)))
            addReplyLongLong(c,o->refcount);
        unlockKey(c,c->argv[2]);
    } else if (!strcasecmp(c->argv[1]->ptr,"encoding") && c->argc == 3) {
        lockKey(c,c->argv[2]);
        if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk)))
            addReplyBulkCString(c,strEncoding(o->encoding));
        unlockKey(c,c->argv[2]);
    } else if (!strcasecmp(c->argv[1]->ptr,"idletime") && c->argc == 3) {
        lockKey(c,c->argv[2]);
        if ((o = objectCommandLookupOrReply(c,c->argv[2],shared.nullbulk)))
            addReplyLongLong(c,estimateObjectIdleTime(o));
        unlockKey(c,c->argv[2]);
    } else {
        addReplyError(c,"Syntax error. Try OBJECT (refcount|encoding|idletime)");
    }
}
Exemple #2
0
void Key::unlock() const
{
	DB::VBucket *bucket = DB::getBucket(*this);
	if ( bucket != NULL )
		pthread_rwlock_unlock( &(bucket->keyLocks[lockKey()]) );
}
Exemple #3
0
uint8_t Key::cacheKey() const
{
	return lockKey();
}