Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

Redis Replicas एक्सपायरिंग कीज़ को छोड़ते हैं: की काउंट क्यों गिरता है

यदि आप Redis में एक्सपायरिंग (जिसे "वोलेटाइल" भी कहा जाता है) कीज़ का उपयोग करते हैं, तो जब आप अपने डेटाबेस में एक नया Redis रेप्लिका जोड़ते हैं तो आप आश्चर्य में पड़ सकते हैं: आपके रेप्लिका पर की काउंट आपके प्राइमरी DB की तुलना में काफी कम हो सकती है। यह विशेष रूप से आम है यदि आपके पास बड़ी संख्या में वोलेटाइल कीज़ हैं।

क्या आपका Redis रेप्लिका कीज़ मिस कर रहा है? क्या आपने अभी डेटा खो दिया है? संक्षिप्त उत्तर है, "नहीं"। हालांकि, यह समझना उपयोगी है कि वास्तव में आपका Redis रेप्लिका कम की काउंट क्यों रिपोर्ट कर रहा है भले ही आपने कोई डेटा नहीं खोया हो। इसमें दो कार्यान्वयन विवरण शामिल हैं: Redis कीज़ को कैसे एक्सपायर करता है और Redis नए रेप्लिकास को आपका डेटासेट कैसे भेजता है।

Redis वोलेटाइल कीज़ को कैसे एक्सपायर करता है?

Redis में, वोलेटाइल कीज़ को उस सटीक क्षण पर मेमोरी से नहीं निकाला जाता जब उन्हें एक्सपायर करने के लिए सेट किया जाता है। इसके बजाय, उन्हें दो विधियों में से एक के माध्यम से हटाया जाता है:

  1. जब एक Redis क्लाइंट किसी की पर रीड या राइट ऑपरेशन करता है, तो Redis सर्वर पहले जांचता है कि क्या वह की मौजूद है और क्या उसका एक्सपायरेशन टाइम है। यदि वह मौजूद है और उसका एक्सपायरेशन टाइम भूतकाल में है, तो Redis कमांड को हैंडल करने से पहले तुरंत उस की को मेमोरी से निकाल देगा।

  2. वोलेटाइल कीज़ को हमेशा के लिए मेमोरी में रहने से रोकने के लिए यदि उन्हें एक्सेस नहीं किया जाता है, तो Redis कीज़ को एक्सपायर करने के लिए एक सिंपल पैसिव एल्गोरिदम का उपयोग करता है: हर 10 मिलीसेकंड में, यह 100 रैंडम वोलेटाइल कीज़ लेता है और जिन कीज़ के एक्सपायरेशन टाइम बीत चुके हैं उन्हें तुरंत निकाल देता है। यदि 25 या अधिक कीज़ निकाली जाती हैं, तो Redis तुरंत 100 और कीज़ लेता है और फिर से शुरू करता है।

ऊपर दूसरी विधि महत्वपूर्ण है क्योंकि इसका मतलब है कि बड़ी संख्या में कीज़ वोलेटाइल कीज़ हो सकती हैं जो पहले से ही "एक्सपायर" हो चुकी हैं लेकिन अभी तक मेमोरी से निकाली नहीं गई हैं1। Redis इन कीज़ को आपके INFO आउटपुट में "कीज़" और "एक्सपायर्स" काउंट में तब तक शामिल करता रहेगा जब तक उन्हें निकाला नहीं जाता।

Redis नए रेप्लिकास को डेटासेट कैसे भेजता है?

जब एक Redis रेप्लिका खुद को एक Redis सर्वर से जोड़ती है, तो प्राइमरी सर्वर अपने डेटासेट का एक RDB स्नैपशॉट बनाता है और इसे रेप्लिका को भेजता है। और जब Redis RDB स्नैपशॉट बनाता है, तो यह भूतकाल में एक्सपायरेशन डेट वाली किसी भी की को शामिल नहीं करता, भले ही उन्हें अभी तक मेमोरी से निकाला नहीं गया हो।

तो मेरे रेप्लिका की की काउंट प्राइमरी सर्वर की तुलना में कम क्यों है?

जब आप एक Redis इंस्टेंस से एक रेप्लिका जोड़ते हैं, तो वह रेप्लिका एक डेटासेट प्राप्त कर रही होती है जिसमें प्राइमरी डेटाबेस से एक्सपायर (लेकिन अभी भी मौजूद) वोलेटाइल कीज़ शामिल नहीं होती हैं। यही कारण है कि जब आप Redis सर्वर को RDB बैकअप से रिस्टोर करते हैं तो आपकी की काउंट गिर सकती है।

RDB व्यवहार को ट्रैक करने में मदद के लिए @mattsta को विशेष धन्यवाद।

  1. व्यवहार में, यह संख्या आमतौर पर बहुत कम होती है क्योंकि Redis लगातार हटाने के लिए कीज़ की तलाश करता रहता है। ↩


  1. Redis का प्रभावी ढंग से उपयोग करने के लिए 10 त्वरित सुझाव Redis का प्रभावी ढंग से उपयोग करने के लिए 10 त्वरित सुझाव

    Redis अभी टेक कम्युनिटी में गर्म है। यह Antirez की एक छोटी व्यक्तिगत परियोजना से उद्योग मानक इन-मेमोरी डेटा स्टोरेज बनने तक एक लंबा सफर तय कर चुका है। इसके साथ Redis का सही तरीके से उपयोग करने के लिए सर्वोत्तम प्रथाओं का एक सेट आता है जिस पर अधिकांश लोग सहमत हो सकते हैं। नीचे हम Redis का सही तरीके स

  1. Redis कुंजी प्रबंधन में महारत हासिल करें: कुशल डेटास्टोर संचालन के लिए आवश्यक कमांड Redis कुंजी प्रबंधन में महारत हासिल करें: कुशल डेटास्टोर संचालन के लिए आवश्यक कमांड

    Redis में, कुंजियों का उपयोग डेटाबेस में संग्रहीत मान को स्टोर, प्रबंधित और पुनः प्राप्त करने के लिए एक अद्वितीय पहचानकर्ता के रूप में किया जाता है। कुंजियों को redis-cli में Redis कमांड का उपयोग करके प्रबंधित किया जा सकता है। सिंटैक्स :- redis host:port> <Command Name> <key name> उ

  1. Redis KEYS कमांड: पैटर्न मिलान के साथ एकाधिक कीज़ प्राप्त करें Redis KEYS कमांड: पैटर्न मिलान के साथ एकाधिक कीज़ प्राप्त करें

    ग्लोब स्टाइल पैटर्न्स: * वाइल्डकार्ड: यह शून्य या अधिक किसी भी कैरेक्टर्स से मेल खाता है जिसमें स्पेसेस शामिल हैं, उदाहरण के लिए foo* fooccc, foo, fooq से मेल खाता है। ? वाइल्डकार्ड: यह स्पेसेस सहित किसी भी एक कैरेक्टर से मेल खाता है, उदाहरण के लिए f?0, fao, fbo, fco से मेल खाता है। [list] वाइल्डका