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) ← EVICTPhù 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ầnPhù 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ứ 4Phù 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ược | Tốc độ | Bộ nhớ | Use Case |
|---|---|---|---|
| LRU | Nhanh | Tốt | Mục đích chung |
| LFU | Trung bình | Tốt nhất | Hot key patterns |
| FIFO | Nhanh nhất | Trung bình | Workload đơ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