/* 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)"); } }
void Key::unlock() const { DB::VBucket *bucket = DB::getBucket(*this); if ( bucket != NULL ) pthread_rwlock_unlock( &(bucket->keyLocks[lockKey()]) ); }
uint8_t Key::cacheKey() const { return lockKey(); }