Skip to content

Eviction Strategies

Khi cache đầy (đạt maxSize), entry nào nên được xóa?

LRU (Least Recently Used)

Xóa entry được truy cập lâu nhất.

Thứ tự truy cập: A → B → C → A → D
Kích thước cache: 3

Sau D:
  A: lastAccess=4 (gần đây)
  C: lastAccess=3 (gần đây)
  D: lastAccess=5 (gần đây)
  B: lastAccess=2 (cũ nhất) ← EVICT

Phù hợp cho: Mục đích chung, hầu hết web applications.

typescript
const node = new CacheNode("node-1", {
  maxSize: 1000,
  evictionPolicy: "lru", // mặc định
});

LFU (Least Frequently Used)

Xóa entry có ít lần truy cập nhất.

Số lần truy cập:
  A: 10 lần
  B: 2 lần  ← EVICT
  C: 8 lần

Phù hợp cho: Workload có rõ "hot" và "cold" keys.

typescript
const node = new CacheNode("node-1", {
  maxSize: 1000,
  evictionPolicy: "lfu",
});

FIFO (First In, First Out)

Xóa entry cũ nhất bất kể truy cập.

Thứ tự chèn: A → B → C → D
Kích thước cache: 3

Sau D:
  A: chèn thứ 1 ← EVICT
  B: chèn thứ 2
  C: chèn thứ 3
  D: chèn thứ 4

Phù hợp cho: Workload đơn giản, streaming data.

typescript
const node = new CacheNode("node-1", {
  maxSize: 1000,
  evictionPolicy: "fifo",
});

So sánh

Chiến lượcTốc độBộ nhớUse Case
LRUNhanhTốtMục đích chung
LFUTrung bìnhTốt nhấtHot key patterns
FIFONhanh nhấtTrung bìnhWorkload đơn giản

TTL (Time To Live)

Ngoài eviction, entries có thể tự hết hạn:

typescript
// Tự hết hạn sau 60 giây
node.set("session:abc", data, 60000);

// Background sweep mỗi 30 giây xóa entries hết hạn

Released under the MIT License.