2012-10-15 11 views
5

zakładając, że wszystkie klucze w instancji redis mają zestaw wygasania, volatile-lru i allkeys-lru są podobne. Ale czy istnieje istotna różnica w wydajności między 2, gdy klucz jest usunięty?Redis maxmemory-policy: wydajność volatile-lru vs allkeys-lru

Bonus pytanie

między dwa różne przypadki, w konfiguracji z polityką tablicy AllKeys-LRU, o takiej samej zawartości i taką samą konfigurację, za wyjątkiem:

  • przykład ma wszystkie swych kluczy i AN upływa zestaw (różne wartości wygasa)
  • Instance B ma none klucz z zestawu wygaśnie

Oprócz narzucenia pamięci w instancji A z powodu bitu wygasania, czy występuje różnica wydajności między 2, gdy klucz jest usuwany przez algorytm allkeys-lru?

W obu przypadkach mówię o wystąpieniach redis 2.4.x na linuksowych 64 bitach z maxmemory = 3Gb z 4-5000 kluczami po osiągnięciu maksymalnej pamięci (większość kluczy to skróty).

Dzięki

Odpowiedz

12

redis.c, line 2311, unstable branch:

/* volatile-lru and allkeys-lru policy */ 
else if (server.maxmemory_policy == REDIS_MAXMEMORY_ALLKEYS_LRU || 
    server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU) 
{ 
    for (k = 0; k < server.maxmemory_samples; k++) { 
     sds thiskey; 
     long thisval; 
     robj *o; 

     de = dictGetRandomKey(dict); 
     thiskey = dictGetKey(de); 
     /* When policy is volatile-lru we need an additonal lookup 
     * to locate the real key, as dict is set to db->expires. */ 
     if (server.maxmemory_policy == REDIS_MAXMEMORY_VOLATILE_LRU) 
      de = dictFind(db->dict, thiskey); 
     o = dictGetVal(de); 
     thisval = estimateObjectIdleTime(o); 

     /* Higher idle time is better candidate for deletion */ 
     if (bestkey == NULL || thisval > bestval) { 
      bestkey = thiskey; 
      bestval = thisval; 
     } 
    } 
} 

Wydaje się, że wszystkie rzeczy są równe allkeys-lru będzie ściśle mówiąc szybciej, ale nie o znacznej wielkości. Szanse na to, że mówimy o niewiele więcej niż ułamek sekundy, są szybsze.

Drugie pytanie zostało już w dużym stopniu odebrane, ale na wszelki wypadek: wygląda na to, że nie ma znaczenia, o ile przycisków ustawiono wygasa, a jeśli tak, to czy nie. Obie instancji A i B w twoim przykładzie będą widzieć tę samą wydajność, gdy klucz zostanie wyczyszczony przez algorytm lru.

+0

Dzięki za wyraźną odpowiedź! – colinux

+0

Cytowanie kodu do odpowiedzi jest z pewnością fajne :-) – antirez

+0

@antirez dostaje komentarz od tego, który napisał, jest jeszcze fajniejszy :) – Mahn

Powiązane problemy