💡تا حالا فکر کردین استراتژی Redis برای پاک کردن کلیدهای cache که ttl اونها اکسپایر شده چیه؟ ☝️
در واقع redis دو تا استراتژی داره که از ترکیب این دو برای مدیریت این موضوع استفاده میکنه.
1- استراتژی اول که بهش میگن lazy_expiration ساده ترینشه اینه که وقتی درخواستی برای گرفتن یه کلید اومد اول چک میکنه اون کلید اکسپایر شده یا نه اگه آره اون رو همونجا پاک میکنه و نال برمیگردونه.
2- خب اگه یه کلید برای مدتها صدا زده نشه چی؟ اینجاست که میرسیم به استراتژی دوم یعنی active_expiration و به این شکله که میاد مثلا هر 100 میلی ثانیه توی لوپ یه batch که شامل مثلا 20 کلید تصادفی هست رو بررسی میکنه و اونایی که اکسپایر شدن رو پاک میکنه. اگه توی اون لوپ بیشتر از 25 درصد کلیدها پاک بشن اون رو زباله تشخیص میده و حدس میزنه کلیدهای بیشتری هم اکسپایر شدن پس یه batch دیگه اجرا میکنه و در نهایت لوپ تموم میشه تا دوباره لوپ بعدی.
برای همین برخلاف تصور، کلیدهای cache بالافاصله با اتمام ttl حذف نمیشن و ممکنه برای مدتی توی حافظه سرور باقی بمونن مخصوصا اگه حجم کلیدها بالا باشه.
پ.ن: چک کردن تعداد کلیدها در هر لوپ و تعداد اجرای لوپ در ثانیه توی کانفیگ redis قابل تنظیمه، ولی نکته ای که هست هر چی تعداد رو بالاتر ببرین کلیدها سریعتر حذف میشن اما cpu بیشتری درگیر میشه.
📱 Farshsd Tofighi
🚀@IranCoderz 👨💻
Post #5078
1.78K

- ❤ 5
- 👍 3