আপনি যদি Redis-এ মেয়াদোত্তীর্ণ ("অস্থির" নামেও পরিচিত) কীগুলি ব্যবহার করেন, তাহলে আপনি যখন আপনার ডাটাবেসে একটি নতুন Redis রেপ্লিকা সংযুক্ত করেন তখন আপনি বিস্মিত হতে পারেন:আপনার প্রতিলিপির কী কাউন্টন আপনার প্রাথমিক DB-তে কী গণনার চেয়ে উল্লেখযোগ্যভাবে কম হতে পারে . এটি বিশেষত সাধারণ যদি আপনার কাছে প্রচুর পরিমাণে উদ্বায়ী কী থাকে।
আপনার Redis রেপ্লিকা কি অনুপস্থিত? আপনি কি শুধু ডেটা হারিয়েছেন? সংক্ষিপ্ত উত্তর হলো 'না". যাইহোক, এটা বোঝা সহায়ক যে কেন, ঠিক, আপনার রেডিস রেপ্লিকা কম কী কাউন্ট রিপোর্ট করছে যদিও আপনি কোনো ডেটা হারাননি। এতে দুটি বাস্তবায়নের বিশদ অন্তর্ভুক্ত রয়েছে:কীভাবে রেডিস কীগুলির মেয়াদ শেষ করে এবং কীভাবে একটি রেডিস নতুন প্রতিলিপিতে আপনার ডেটাসেট পাঠায়৷
কীভাবে Redis-এর মেয়াদ শেষ হয় উদ্বায়ী কী?
Redis-এ, ভোলাটাইল কীগুলি মেমরি থেকে এক্সপাঞ্জ করা হয় না ঠিক সেই মুহুর্তে যখন সেগুলি মেয়াদ শেষ হয়ে যায়। পরিবর্তে, তারা দুটি পদ্ধতির একটির মাধ্যমে মুছে ফেলা হয়:
-
যখন একটি রেডিস ক্লায়েন্ট একটি কীতে একটি রিড বা রাইট অপারেশন সম্পাদন করে, তখন রেডিসার্ভার প্রথমে চেক করবে যে কীটি বিদ্যমান আছে কিনা এবং মেয়াদ শেষ হওয়ার সময় আছে কিনা৷ যদি এটি বিদ্যমান থাকে এবং অতীতে মেয়াদ শেষ হওয়ার সময় থাকে, তাহলে Redis অবিলম্বে মেমরি থেকে কীটি অপসারণ করবে কমান্ড পরিচালনা করার আগে।
-
উদ্বায়ী কীগুলিকে চিরতরে মেমরিতে আটকে রাখা রোধ করতে যদি সেগুলি অ্যাক্সেস না করা হয়, রেডিস কীগুলির মেয়াদ শেষ করার জন্য একটি সাধারণ প্যাসিভ অ্যালগরিদম ব্যবহার করে:প্রতি 10 মিলিসেকেন্ডে, এটি 100টি এলোমেলো উদ্বায়ী কীগুলি দখল করে এবং যেকোন কীগুলির মেয়াদ শেষ হয়ে গেছে তা অবিলম্বে অপসারণ করে৷ যদি 25টি বা তার বেশি কী অপসারণ করা হয়, তাহলে অবিলম্বে আরও 100টি কী ধরুন এবং আবার শুরু করুন৷
উপরের দ্বিতীয় পদ্ধতিটি গুরুত্বপূর্ণ কারণ এর মানে হল যে উল্লেখযোগ্য সংখ্যক কীগুলি উদ্বায়ী কী হতে পারে যেগুলি ইতিমধ্যেই "মেয়াদ শেষ" হয়ে গেছে কিন্তু যেগুলি এখনও মেমরি থেকে নিষ্কাশন করা হয়নি1
. Redis এই কীগুলিকে আপনার INFO
-এ "কী" এবং "মেয়াদ শেষ" গণনায় অন্তর্ভুক্ত করা চালিয়ে যাবে আউটপুট যতক্ষণ না সেগুলি অপসারণ করা হয়।
কিভাবে রেডিস নতুন প্রতিলিপিতে ডেটাসেট পাঠায়?
যখন একটি রেডিস রেপ্লিকা নিজেকে একটি রেডিস সার্ভারের সাথে সংযুক্ত করে, তখন প্রাথমিক সার্ভার তার ডেটাসেটের RDB স্ন্যাপশট তৈরি করে এবং এটি প্রতিলিপিতে পাঠায়। এবং যখন Redis RDB স্ন্যাপশট তৈরি করে, তখন এটি অতীতের মেয়াদ শেষ হওয়ার তারিখ সহ কোন কী অন্তর্ভুক্ত করে না ,এমনকি যদি সেগুলি এখনও মেমরি থেকে অপসারিত না হয়।
তাহলে কেন আমার প্রতিরূপের কী গণনা প্রাথমিক সার্ভারের চেয়ে কম?
আপনি যখন একটি রেডিস ইনস্ট্যান্সের সাথে একটি প্রতিলিপি সংযুক্ত করেন, তখন সেই প্রতিরূপটি প্রাথমিক ডাটাবেস থেকে মেয়াদোত্তীর্ণ (কিন্তু এখনও বিদ্যমান) উদ্বায়ী কীগুলি অন্তর্ভুক্ত করে না এমন ডেটাসেট গ্রহণ করে। এটি একই কারণ যে anRDB ব্যাকআপ থেকে একটি Redis সার্ভার পুনরুদ্ধার করার সময় আপনার কী সংখ্যা কমে যেতে পারে৷
আরডিবি আচরণে সাহায্য করার জন্য @mattsta কে বিশেষ ধন্যবাদ।
- ৷
অনুশীলনে, এই সংখ্যাটি সাধারণত অনেক কম হয় কারণ রেডিস ক্রমাগত মুছে ফেলার জন্য কী খুঁজছে। ↩