From 3862529a39ee63f7493aa6c53f5739720cdbb6a1 Mon Sep 17 00:00:00 2001 From: Robey Pointer Date: Thu, 19 Aug 2010 16:47:07 -0700 Subject: [PATCH] add memory_pressure_selection config. --- src/config.c | 2 ++ src/redis.c | 3 ++- src/redis.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/config.c b/src/config.c index 7dd84e810..329d2ce84 100644 --- a/src/config.c +++ b/src/config.c @@ -123,6 +123,8 @@ void loadServerConfig(char *filename) { server.maxclients = atoi(argv[1]); } else if (!strcasecmp(argv[0],"maxmemory") && argc == 2) { server.maxmemory = memtoll(argv[1],NULL); + } else if (!strcasecmp(argv[0],"memory_pressure_selection") && argc == 2) { + server.memory_pressure_selection = atoi(argv[1]); } else if (!strcasecmp(argv[0],"slaveof") && argc == 3) { server.masterhost = sdsnew(argv[1]); server.masterport = atoi(argv[2]); diff --git a/src/redis.c b/src/redis.c index 37c8717e1..604c59e35 100644 --- a/src/redis.c +++ b/src/redis.c @@ -733,6 +733,7 @@ void initServerConfig() { server.maxclients = 0; server.blpop_blocked_clients = 0; server.maxmemory = 0; + server.memory_pressure_selection = 3; server.vm_enabled = 0; server.vm_swap_file = zstrdup("/tmp/redis-%p.vm"); server.vm_page_size = 256; /* 256 bytes per page */ @@ -1328,7 +1329,7 @@ void freeMemoryIfNeeded(void) { freed = 1; /* From a sample of three keys drop the one nearest to * the natural expire */ - for (k = 0; k < 3; k++) { + for (k = 0; k < server.memory_pressure_selection; k++) { time_t t; de = dictGetRandomKey(server.db[j].expires); diff --git a/src/redis.h b/src/redis.h index e52688a95..13326d02a 100644 --- a/src/redis.h +++ b/src/redis.h @@ -381,6 +381,7 @@ struct redisServer { int replstate; unsigned int maxclients; unsigned long long maxmemory; + int memory_pressure_selection; /* # of candidates to choose from in freeMemoryIfNeeded(). */ unsigned int blpop_blocked_clients; unsigned int vm_blocked_clients; /* Sort parameters - qsort_r() is only available under BSD so we -- GitLab