الگوریتم‌های جایگزینی کش

الگوریتم‌های جایگزینی کش: LRU، LFU و FIFO — پیاده‌سازی کامل LRU با OrderedDict و ساختار دوگانه

مسئله: کش پر شد!

کش ظرفیت محدود دارد؛ وقتی پر شد و درخواست جدید آمد، چه چیزی را بیاندازیم؟ — الگوریتم جایگزینی (Eviction) تصمیم می‌گیرد.

سه الگوریتم اصلی

الگوریتمایدهمناسبعیب
FIFOاولین وارد، اولین خارجسادهبه تازگی اهمیت نمی‌دهد
LRUکم‌ترین استفاده اخیر خارجاکثر موارد ✓✓داده قدیمی پرکاربرد ممکن است برود
LFUکم‌ترین فراوانی کل خارجالگوهای پایدارداده «روزهای اوج» گیر می‌کند

LRU — پادشاه عملی

فرض: «چیزی که اخیراً استفاده شده، به‌احتمال زیاد دوباره استفاده می‌شود» (محلی بودن زمانی). پس قدیمی‌ترین استفاده‌نشده را حذف کن.

مثال (ظرفیت ۳):

دسترسی: A B C D A
A B C در کش
D می‌آید → پر! → LRU = B (قدیمی‌ترین استفاده) → حذف B
A می‌آید → hit! (و A تازه می‌شود)

پیاده‌سازی O(1)

ترفند: هش‌مپ + لیست دوپیوندی:

در پایتون: OrderedDict همین ساختار را آماده دارد!

LRU در دنیای واقعی

نکته: در مصاحبه System Design وقتی کش می‌گویید، بگویید «با سیاست LRU و TTL» — همین دو کلمه نشان می‌دهد جزئیات را می‌دانید!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط