System Design Basics for Backend Developers · บทเรียน

นโยบายการนำข้อมูลออกจากแคช

สำรวจวิธีที่แคชตัดสินใจว่าจะเก็บหรือละทิ้งข้อมูลใดเมื่อหน่วยความจำเต็ม ครอบคลุม LRU, LFU, FIFO, TTL และข้อแลกเปลี่ยนของแต่ละแบบ

บทเรียน 4 จาก 413 ขั้นตอน

นโยบายการนำข้อมูลออกจากแคช เป็นบทเรียน System Design Basics for Backend Developers ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน System Design Basics for Backend Developers และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส System Design Basics for Backend Developers มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Why Eviction Is Necessary

A cache is fast because it lives in limited memory. When it fills up, it must evict something to make room for new data. The eviction policy decides what to drop.

A good policy keeps the data most likely to be reused.

Hit Rate Is the Goal

The metric that matters is the hit rate: the fraction of requests served from cache. A better eviction policy raises the hit rate, which means fewer slow trips to the database or origin.

hits = 850
misses = 150
hit_rate = hits / (hits + misses)
print('hit rate:', hit_rate)

FIFO

FIFO (First In, First Out) evicts the oldest inserted item regardless of usage. It is simple but ignores access patterns, so a frequently used old item can be wrongly evicted.

LRU: Least Recently Used

LRU evicts the item that has not been accessed for the longest time. It assumes recently used data will be used again soon — true for most workloads, which is why LRU is the default in many caches.

Implementing LRU

A classic LRU uses an ordered map. On access, move the key to the most-recent end; when full, evict from the least-recent end.

from collections import OrderedDict
class LRU:
    def __init__(self, cap):
        self.cap = cap
        self.d = OrderedDict()
    def get(self, k):
        if k in self.d:
            self.d.move_to_end(k)
            return self.d[k]
    def put(self, k, v):
        self.d[k] = v
        self.d.move_to_end(k)
        if len(self.d) > self.cap:
            self.d.popitem(last=False)

c = LRU(2)
c.put('a', 1); c.put('b', 2); c.get('a'); c.put('c', 3)
print(list(c.d.keys()))

LFU: Least Frequently Used

LFU evicts the item accessed the fewest times. It favors long-term popular items over recent bursts. The downside: a once-popular item can linger long after it stops being useful.

TTL-Based Expiration

A TTL (time to live) expires items after a fixed duration regardless of memory pressure. It bounds staleness and is often combined with LRU: TTL controls freshness, LRU controls memory.

SET session:42 "..." EX 3600
# expires in 3600 seconds

Random and Allkeys Variants

Some caches offer random eviction (cheap, surprisingly decent) and scope variants: evict only keys with a TTL set, or evict from all keys. Redis exposes policies like allkeys-lru and volatile-ttl.

Thundering Herd on Eviction

When a hot key is evicted or expires, many clients may simultaneously rebuild it — a thundering herd that hammers the origin. Mitigate with request coalescing (single-flight) or slightly randomized TTLs to spread out expirations.

Choosing a Policy

Match the policy to the workload:

  • Recency-driven traffic: LRU
  • Stable popularity: LFU
  • Freshness-critical data: TTL
  • Uniform access: random is fine and cheap

Eviction in a CDN

CDNs apply the same ideas at the edge. Each edge node has finite storage and evicts (often LRU) plus honors Cache-Control: max-age as a TTL. Understanding eviction explains why a cold edge node has a low initial hit rate.

Quick Check

Test your understanding of eviction policies.

Recap

You learned how caches manage limited memory:

  • Eviction policies aim to maximize hit rate
  • FIFO, LRU, LFU, TTL, and random each suit different patterns
  • Thundering herds need coalescing or jittered TTLs
  • CDNs apply the same eviction logic at the edge
เริ่มต้นได้ฟรี

เรียนรู้ System Design Basics for Backend Developers ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “นโยบายการนำข้อมูลออกจากแคช” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “นโยบายการนำข้อมูลออกจากแคช” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส System Design Basics for Backend Developers ให้อัปเกรดเป็น CoddyKit PRO คอร์ส System Design Basics for Backend Developers มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “นโยบายการนำข้อมูลออกจากแคช”

สำรวจวิธีที่แคชตัดสินใจว่าจะเก็บหรือละทิ้งข้อมูลใดเมื่อหน่วยความจำเต็ม ครอบคลุม LRU, LFU, FIFO, TTL และข้อแลกเปลี่ยนของแต่ละแบบ คุณปฏิบัติ System Design Basics for Backend Developers ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน System Design Basics for Backend Developers หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน System Design Basics for Backend Developers บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “นโยบายการนำข้อมูลออกจากแคช” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน System Design Basics for Backend Developers นี้ได้ไหม

ได้ บทเรียน System Design Basics for Backend Developers ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบการทำให้แคชไม่ถูกต้อง
  2. การผสานรวม CDN และการแคชที่ขอบเครือข่าย
  3. การแคชแบบกระจายด้วย Redis
  4. นโยบายการนำข้อมูลออกจากแคช
← กลับไปที่ System Design Basics for Backend Developers