2012-10-15 12 views
5

का प्रदर्शन एक रेडिस इंस्टेंस में सभी चाबियाँ एक समाप्ति सेट, अस्थिर-लू और ऑलकी-लू समान हैं। लेकिन जब कुंजी को हटा दिया जाता है तो 2 के बीच एक महत्वपूर्ण प्रदर्शन अंतर होता है?रेडिस मैक्समेमरी-पॉलिसी: अस्थिर-लू बनाम ऑलकी-लू

बोनस सवाल:

2 के बीच अलग उदाहरणों allkeys-LRU नीति के साथ विन्यस्त, एक ही सामग्री और एक ही विन्यास होने को छोड़कर:

  • उदाहरण एक सभी इसकी एक समय सीमा समाप्त हो के साथ कुंजी है सेट (के विभिन्न मान की समय सीमा समाप्त)
  • उदाहरण बी के साथ एक सेट समय सीमा समाप्त हो कोई भी कुंजी है

उदाहरण के लिए स्मृति के ऊपरी हिस्से के अलावा ए समाप्त होने वाली बिट्स के कारण, क्या 2 के बीच एक प्रदर्शन अंतर होता है जब एक कुंजी को allkeys-lru algorithm द्वारा हटा दिया जाता है?

दोनों मामलों में, मैं लिनक्स 64 बिट्स पर रेडिस 2.4.x के उदाहरणों के बारे में बात कर रहा हूं जिसमें maxmemory = 3 जीबी 4-5000 कुंजियों के साथ है जब अधिकतम स्मृति तक पहुंच जाती है (अधिकांश चाबियां हैंश होती हैं)।

धन्यवाद

उत्तर

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; 
     } 
    } 
} 

यह सब बातों के समान allkeys-lru सख्ती से तेजी से बोलने की जाएगी किया जा रहा है की तरह लगता है, लेकिन एक महत्वपूर्ण परिमाण से नहीं । संभावना है कि हम माइक्रोसेकंड के एक अंश से अधिक नहीं के बारे में बात कर रहे हैं।

दूसरा प्रश्न काफी पहले से ही उत्तर दिया गया है, लेकिन बस मामले में: ऐसा लगता है कि यह allkeys-lru पर कोई फर्क नहीं पड़ता कि कितनी कुंजी समाप्त होने के लिए सेट की गई है, या यदि कोई है। आपके उदाहरण में इंस्टेंस ए और बी दोनों एक ही प्रदर्शन को देखेंगे जब एक कुंजी lru एल्गोरिदम द्वारा शुद्ध किया जाता है।

+0

आपके स्पष्ट उत्तरदाता के लिए धन्यवाद! – colinux

+0

उत्तर देने के लिए कोड का उद्धरण निश्चित रूप से अच्छा है :-) – antirez

+0

@antirez इसे लिखने वाले व्यक्ति से एक टिप्पणी प्राप्त करना भी कूलर है :) – Mahn

संबंधित मुद्दे