mirror of
https://github.com/fluencelabs/redis
synced 2025-05-10 09:47:12 +00:00
Merge branch '2.2' of github.com:antirez/redis into 2.2
This commit is contained in:
commit
6a9764d183
@ -12,6 +12,21 @@ for 2.0.
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
What's new in Redis 2.2.4
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* Return value of OBJECT DEBUG against sorted sets fixed, now is "skiplist".
|
||||||
|
|
||||||
|
What's new in Redis 2.2.3
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* Fixed issue #503. MONITOR + QUIT (and other combinations) could crash
|
||||||
|
the server.
|
||||||
|
* OBJECT command implemented. See http://redis.io/commands/object
|
||||||
|
* Fixed a problem in redis-cli related to escapes in the form "\x..".
|
||||||
|
* Fixed a minor memory leak in redis-cli
|
||||||
|
* Saved RDB on SIGTERM on archs where it was not working properly.
|
||||||
|
|
||||||
What's new in Redis 2.2.2
|
What's new in Redis 2.2.2
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
45
src/object.c
45
src/object.c
@ -93,10 +93,13 @@ robj *createHashObject(void) {
|
|||||||
|
|
||||||
robj *createZsetObject(void) {
|
robj *createZsetObject(void) {
|
||||||
zset *zs = zmalloc(sizeof(*zs));
|
zset *zs = zmalloc(sizeof(*zs));
|
||||||
|
robj *o;
|
||||||
|
|
||||||
zs->dict = dictCreate(&zsetDictType,NULL);
|
zs->dict = dictCreate(&zsetDictType,NULL);
|
||||||
zs->zsl = zslCreate();
|
zs->zsl = zslCreate();
|
||||||
return createObject(REDIS_ZSET,zs);
|
o = createObject(REDIS_ZSET,zs);
|
||||||
|
o->encoding = REDIS_ENCODING_SKIPLIST;
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeStringObject(robj *o) {
|
void freeStringObject(robj *o) {
|
||||||
@ -425,6 +428,7 @@ char *strEncoding(int encoding) {
|
|||||||
case REDIS_ENCODING_LINKEDLIST: return "linkedlist";
|
case REDIS_ENCODING_LINKEDLIST: return "linkedlist";
|
||||||
case REDIS_ENCODING_ZIPLIST: return "ziplist";
|
case REDIS_ENCODING_ZIPLIST: return "ziplist";
|
||||||
case REDIS_ENCODING_INTSET: return "intset";
|
case REDIS_ENCODING_INTSET: return "intset";
|
||||||
|
case REDIS_ENCODING_SKIPLIST: return "skiplist";
|
||||||
default: return "unknown";
|
default: return "unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -439,3 +443,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)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,8 @@ struct redisCommand readonlyCommandTable[] = {
|
|||||||
{"punsubscribe",punsubscribeCommand,-1,0,NULL,0,0,0},
|
{"punsubscribe",punsubscribeCommand,-1,0,NULL,0,0,0},
|
||||||
{"publish",publishCommand,3,REDIS_CMD_FORCE_REPLICATION,NULL,0,0,0},
|
{"publish",publishCommand,3,REDIS_CMD_FORCE_REPLICATION,NULL,0,0,0},
|
||||||
{"watch",watchCommand,-2,0,NULL,0,0,0},
|
{"watch",watchCommand,-2,0,NULL,0,0,0},
|
||||||
{"unwatch",unwatchCommand,1,0,NULL,0,0,0}
|
{"unwatch",unwatchCommand,1,0,NULL,0,0,0},
|
||||||
|
{"object",objectCommand,-2,0,NULL,0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*============================ Utility functions ============================ */
|
/*============================ Utility functions ============================ */
|
||||||
|
@ -81,6 +81,7 @@
|
|||||||
#define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */
|
#define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */
|
||||||
#define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */
|
#define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */
|
||||||
#define REDIS_ENCODING_INTSET 6 /* Encoded as intset */
|
#define REDIS_ENCODING_INTSET 6 /* Encoded as intset */
|
||||||
|
#define REDIS_ENCODING_SKIPLIST 7 /* Encoded as skiplist */
|
||||||
|
|
||||||
/* Object types only used for dumping to disk */
|
/* Object types only used for dumping to disk */
|
||||||
#define REDIS_EXPIRETIME 253
|
#define REDIS_EXPIRETIME 253
|
||||||
@ -1008,6 +1009,7 @@ void punsubscribeCommand(redisClient *c);
|
|||||||
void publishCommand(redisClient *c);
|
void publishCommand(redisClient *c);
|
||||||
void watchCommand(redisClient *c);
|
void watchCommand(redisClient *c);
|
||||||
void unwatchCommand(redisClient *c);
|
void unwatchCommand(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));
|
||||||
|
@ -1 +1 @@
|
|||||||
#define REDIS_VERSION "2.2.2"
|
#define REDIS_VERSION "2.2.4"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user