Permalink
Browse files

Merge branch '2.2' of github.com:antirez/redis into 2.2

  • Loading branch information...
antirez committed Dec 20, 2010
2 parents 076ff11 + dd889d8 commit 54e9f28922b88386d84c5287bdd55f48363e904d
Showing with 11 additions and 33 deletions.
  1. +4 −32 src/redis.c
  2. +1 −0 src/redis.h
  3. +6 −1 src/t_string.c
View
@@ -891,6 +891,7 @@ void initServer() {
server.stat_numcommands = 0;
server.stat_numconnections = 0;
server.stat_expiredkeys = 0;
+ server.stat_evictedkeys = 0;
server.stat_starttime = time(NULL);
server.stat_keyspace_misses = 0;
server.stat_keyspace_hits = 0;
@@ -1177,6 +1178,7 @@ sds genRedisInfoString(void) {
"total_connections_received:%lld\r\n"
"total_commands_processed:%lld\r\n"
"expired_keys:%lld\r\n"
+ "evicted_keys:%lld\r\n"
"keyspace_hits:%lld\r\n"
"keyspace_misses:%lld\r\n"
"hash_max_zipmap_entries:%zu\r\n"
@@ -1219,6 +1221,7 @@ sds genRedisInfoString(void) {
server.stat_numconnections,
server.stat_numcommands,
server.stat_expiredkeys,
+ server.stat_evictedkeys,
server.stat_keyspace_hits,
server.stat_keyspace_misses,
server.hash_max_zipmap_entries,
@@ -1436,44 +1439,13 @@ void freeMemoryIfNeeded(void) {
if (bestkey) {
robj *keyobj = createStringObject(bestkey,sdslen(bestkey));
dbDelete(db,keyobj);
- server.stat_expiredkeys++;
+ server.stat_evictedkeys++;
decrRefCount(keyobj);
freed++;
}
}
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! ================================ */
View
@@ -387,6 +387,7 @@ struct redisServer {
long long stat_numcommands; /* number of processed commands */
long long stat_numconnections; /* number of connections received */
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_misses; /* number of failed lookups of keys */
/* Configuration */
View
@@ -346,14 +346,19 @@ void msetnxCommand(redisClient *c) {
}
void incrDecrCommand(redisClient *c, long long incr) {
- long long value;
+ long long value, oldvalue;
robj *o;
o = lookupKeyWrite(c->db,c->argv[1]);
if (o != NULL && checkType(c,o,REDIS_STRING)) return;
if (getLongLongFromObjectOrReply(c,o,&value,NULL) != REDIS_OK) return;
+ oldvalue = value;
value += incr;
+ if ((incr < 0 && value > oldvalue) || (incr > 0 && value < oldvalue)) {
+ addReplyError(c,"increment or decrement would overflow");
+ return;
+ }
o = createStringObjectFromLongLong(value);
dbReplace(c->db,c->argv[1],o);
touchWatchedKey(c->db,c->argv[1]);

0 comments on commit 54e9f28

Please sign in to comment.