High-performance cache policies and supporting data structures.
Spec maturity: reference
Executable oracle:
tests/abstract_models/exact/lfu.rs(LfuModel); independent reference:reference/lfu.rs(NaiveLfuModel).
Least Frequently Used cache replacement: evict the key with minimum access frequency when space is needed.
| Variable | Type | Meaning |
|---|---|---|
freq |
Map<K, ℕ> |
Access count per resident key |
buckets |
frequency-ordered structure | Min-frequency bucket with FIFO tie-break |
capacity |
usize |
Maximum resident count |
freq = ∅, capacity = C| Observable | Definition |
|---|---|
resident |
Keys in freq |
peek_victim |
Minimum frequency; FIFO order within min bucket |
frequency(k) |
freq[k] if resident |
hit |
MustHit / MustMiss from membership |
Insert(k)k ∈ resident: increment frequency (via increment_frequency on impl).evicted_on_insert.k at frequency 1.Get(k) / Peek(k)hit. Get increments frequency on hit.GetMut(k)Touch(k)increment_frequency(k) on hit (same frequency effect as Get).Remove(k)k from frequency structure.EvictOnehand_written_lfu_fifo_tie_break locks this behavior.Op mappingOp |
Cache API | Side effects |
|---|---|---|
Insert(k) |
insert(k, v) |
Freq 1 or increment |
Get(k) |
get(k) |
Increment on hit |
Peek(k) |
peek(k) |
None |
GetMut(k) |
— | No-op |
Touch(k) |
increment_frequency(k) |
Increment on hit |
Remove(k) |
remove(k) |
Remove |
EvictOne |
evict_one() |
Evict min freq |
Dual-run extra check: after each step, cache.frequency(k) == model.frequency(k) for all resident k.