Merge branch 'master' of github.com:antirez/redis
This commit is contained in:
commit
d841dedb5f
36
src/redis.c
36
src/redis.c
@ -891,6 +891,7 @@ void initServer() {
|
|||||||
server.stat_numcommands = 0;
|
server.stat_numcommands = 0;
|
||||||
server.stat_numconnections = 0;
|
server.stat_numconnections = 0;
|
||||||
server.stat_expiredkeys = 0;
|
server.stat_expiredkeys = 0;
|
||||||
|
server.stat_evictedkeys = 0;
|
||||||
server.stat_starttime = time(NULL);
|
server.stat_starttime = time(NULL);
|
||||||
server.stat_keyspace_misses = 0;
|
server.stat_keyspace_misses = 0;
|
||||||
server.stat_keyspace_hits = 0;
|
server.stat_keyspace_hits = 0;
|
||||||
@ -1177,6 +1178,7 @@ sds genRedisInfoString(void) {
|
|||||||
"total_connections_received:%lld\r\n"
|
"total_connections_received:%lld\r\n"
|
||||||
"total_commands_processed:%lld\r\n"
|
"total_commands_processed:%lld\r\n"
|
||||||
"expired_keys:%lld\r\n"
|
"expired_keys:%lld\r\n"
|
||||||
|
"evicted_keys:%lld\r\n"
|
||||||
"keyspace_hits:%lld\r\n"
|
"keyspace_hits:%lld\r\n"
|
||||||
"keyspace_misses:%lld\r\n"
|
"keyspace_misses:%lld\r\n"
|
||||||
"hash_max_zipmap_entries:%zu\r\n"
|
"hash_max_zipmap_entries:%zu\r\n"
|
||||||
@ -1219,6 +1221,7 @@ sds genRedisInfoString(void) {
|
|||||||
server.stat_numconnections,
|
server.stat_numconnections,
|
||||||
server.stat_numcommands,
|
server.stat_numcommands,
|
||||||
server.stat_expiredkeys,
|
server.stat_expiredkeys,
|
||||||
|
server.stat_evictedkeys,
|
||||||
server.stat_keyspace_hits,
|
server.stat_keyspace_hits,
|
||||||
server.stat_keyspace_misses,
|
server.stat_keyspace_misses,
|
||||||
server.hash_max_zipmap_entries,
|
server.hash_max_zipmap_entries,
|
||||||
@ -1436,44 +1439,13 @@ void freeMemoryIfNeeded(void) {
|
|||||||
if (bestkey) {
|
if (bestkey) {
|
||||||
robj *keyobj = createStringObject(bestkey,sdslen(bestkey));
|
robj *keyobj = createStringObject(bestkey,sdslen(bestkey));
|
||||||
dbDelete(db,keyobj);
|
dbDelete(db,keyobj);
|
||||||
server.stat_expiredkeys++;
|
server.stat_evictedkeys++;
|
||||||
decrRefCount(keyobj);
|
decrRefCount(keyobj);
|
||||||
freed++;
|
freed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!freed) return; /* nothing to free... */
|
if (!freed) return; /* nothing to free... */
|
||||||
}
|
}
|
||||||
|
|
||||||
while(0) {
|
|
||||||
int j, k, freed = 0;
|
|
||||||
for (j = 0; j < server.dbnum; j++) {
|
|
||||||
int minttl = -1;
|
|
||||||
sds minkey = NULL;
|
|
||||||
robj *keyobj = NULL;
|
|
||||||
struct dictEntry *de;
|
|
||||||
|
|
||||||
if (dictSize(server.db[j].expires)) {
|
|
||||||
freed = 1;
|
|
||||||
/* From a sample of three keys drop the one nearest to
|
|
||||||
* the natural expire */
|
|
||||||
for (k = 0; k < 3; k++) {
|
|
||||||
time_t t;
|
|
||||||
|
|
||||||
de = dictGetRandomKey(server.db[j].expires);
|
|
||||||
t = (time_t) dictGetEntryVal(de);
|
|
||||||
if (minttl == -1 || t < minttl) {
|
|
||||||
minkey = dictGetEntryKey(de);
|
|
||||||
minttl = t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
keyobj = createStringObject(minkey,sdslen(minkey));
|
|
||||||
dbDelete(server.db+j,keyobj);
|
|
||||||
server.stat_expiredkeys++;
|
|
||||||
decrRefCount(keyobj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!freed) return; /* nothing to free... */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =================================== Main! ================================ */
|
/* =================================== Main! ================================ */
|
||||||
|
@ -387,6 +387,7 @@ struct redisServer {
|
|||||||
long long stat_numcommands; /* number of processed commands */
|
long long stat_numcommands; /* number of processed commands */
|
||||||
long long stat_numconnections; /* number of connections received */
|
long long stat_numconnections; /* number of connections received */
|
||||||
long long stat_expiredkeys; /* number of expired keys */
|
long long stat_expiredkeys; /* number of expired keys */
|
||||||
|
long long stat_evictedkeys; /* number of evicted keys (maxmemory) */
|
||||||
long long stat_keyspace_hits; /* number of successful lookups of keys */
|
long long stat_keyspace_hits; /* number of successful lookups of keys */
|
||||||
long long stat_keyspace_misses; /* number of failed lookups of keys */
|
long long stat_keyspace_misses; /* number of failed lookups of keys */
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
|
@ -346,14 +346,19 @@ void msetnxCommand(redisClient *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void incrDecrCommand(redisClient *c, long long incr) {
|
void incrDecrCommand(redisClient *c, long long incr) {
|
||||||
long long value;
|
long long value, oldvalue;
|
||||||
robj *o;
|
robj *o;
|
||||||
|
|
||||||
o = lookupKeyWrite(c->db,c->argv[1]);
|
o = lookupKeyWrite(c->db,c->argv[1]);
|
||||||
if (o != NULL && checkType(c,o,REDIS_STRING)) return;
|
if (o != NULL && checkType(c,o,REDIS_STRING)) return;
|
||||||
if (getLongLongFromObjectOrReply(c,o,&value,NULL) != REDIS_OK) return;
|
if (getLongLongFromObjectOrReply(c,o,&value,NULL) != REDIS_OK) return;
|
||||||
|
|
||||||
|
oldvalue = value;
|
||||||
value += incr;
|
value += incr;
|
||||||
|
if ((incr < 0 && value > oldvalue) || (incr > 0 && value < oldvalue)) {
|
||||||
|
addReplyError(c,"increment or decrement would overflow");
|
||||||
|
return;
|
||||||
|
}
|
||||||
o = createStringObjectFromLongLong(value);
|
o = createStringObjectFromLongLong(value);
|
||||||
dbReplace(c->db,c->argv[1],o);
|
dbReplace(c->db,c->argv[1],o);
|
||||||
touchWatchedKey(c->db,c->argv[1]);
|
touchWatchedKey(c->db,c->argv[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user