Skip to content

Commit 04f1d03

Browse files
authored
refactor: unify cache traits and enhance policy support (#85)
* refactor: unify cache traits and enhance policy support This commit introduces a breaking change by replacing multiple cache traits (`ReadOnlyCache`, `CoreCache`, `MutableCache`, `FifoCacheTrait`, `LruCacheTrait`, `LfuCacheTrait`, `LrukCacheTrait`) with a single `Cache<K, V>` trait. Five optional capability traits have been added: `EvictingCache`, `VictimInspectable`, `RecencyTracking`, `FrequencyTracking`, and `HistoryTracking`. Policy-specific methods are now inherent methods, and the `builder::Cache` has been renamed to `builder::DynCache` to avoid naming collisions. All cache policies have been updated to implement the new `Cache<K, V>` trait, ensuring universal support for `peek` and `remove` operations. * docs: refine SLRU cache removal policy documentation Updated the documentation for `SlruCore` to streamline the description of key removal via [`Cache::remove`], enhancing clarity and consistency. This change aligns with Rust API guidelines and improves the overall usability of the SLRU cache policy documentation.
1 parent e95cb50 commit 04f1d03

49 files changed

Lines changed: 1725 additions & 2641 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Breaking
11+
- Replace `ReadOnlyCache`, `CoreCache`, `MutableCache`, `FifoCacheTrait`, `LruCacheTrait`, `LfuCacheTrait`, `LrukCacheTrait` with a single unified `Cache<K, V>` trait.
12+
- Add five optional capability traits: `EvictingCache`, `VictimInspectable`, `RecencyTracking`, `FrequencyTracking`, `HistoryTracking`.
13+
- Policy-specific methods (`pop_oldest`, `pop_lru`, `pop_lfu`, `pop_lru_k`, `age_rank`, etc.) are now inherent methods, not trait methods.
14+
- Rename `builder::Cache` to `builder::DynCache` to avoid collision with the new `traits::Cache` trait.
15+
- Remove `CacheTierManager` and `CacheTier` traits (no existing implementations).
16+
- All 18 policies now implement `Cache<K, V>` with universal `peek` and `remove` support.
17+
1018
## [0.6.0] - 2026-03-31
1119

1220
### Breaking

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ For advanced use cases requiring policy-specific operations, use the underlying
218218
```rust
219219
use std::sync::Arc;
220220
use cachekit::policy::lru::LruCore;
221-
use cachekit::traits::{CoreCache, LruCacheTrait};
221+
use cachekit::traits::Cache;
222222

223223
fn main() {
224224
// LRU with policy-specific operations

bench-support/src/metrics.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
1010
use std::time::{Duration, Instant};
1111

12-
use cachekit::traits::CoreCache;
12+
use cachekit::traits::Cache;
1313
use rand::SeedableRng;
1414

1515
use crate::workload::WorkloadSpec;
@@ -279,7 +279,7 @@ pub fn run_benchmark<C, V, F>(
279279
value_for_key: F,
280280
) -> BenchmarkResult
281281
where
282-
C: CoreCache<u64, V>,
282+
C: Cache<u64, V>,
283283
F: Fn(u64) -> V,
284284
{
285285
let mut generator = config.workload.generator();
@@ -386,7 +386,7 @@ pub fn measure_scan_resistance<C, V, F>(
386386
value_for_key: F,
387387
) -> ScanResistanceResult
388388
where
389-
C: CoreCache<u64, V>,
389+
C: Cache<u64, V>,
390390
F: Fn(u64) -> V,
391391
{
392392
let warmup_ops = capacity * 2;
@@ -496,7 +496,7 @@ pub fn measure_adaptation_speed<C, V, F>(
496496
value_for_key: F,
497497
) -> AdaptationResult
498498
where
499-
C: CoreCache<u64, V>,
499+
C: Cache<u64, V>,
500500
F: Fn(u64) -> V,
501501
{
502502
let warmup_ops = capacity * 2;

bench-support/src/operation.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
use std::sync::Arc;
77

8-
use cachekit::traits::CoreCache;
8+
use cachekit::traits::Cache;
99
use rand::rngs::SmallRng;
1010
use rand::{RngExt, SeedableRng};
1111

@@ -87,7 +87,7 @@ pub fn run_operations<C, V, F, M>(
8787
value_for_key: F,
8888
) -> OpCounts
8989
where
90-
C: CoreCache<u64, Arc<V>>,
90+
C: Cache<u64, Arc<V>>,
9191
F: Fn(u64) -> Arc<V>,
9292
M: OpModel,
9393
{
@@ -110,7 +110,7 @@ fn apply_op<C, V, F, M>(
110110
counts: &mut OpCounts,
111111
op: Operation,
112112
) where
113-
C: CoreCache<u64, Arc<V>>,
113+
C: Cache<u64, Arc<V>>,
114114
F: Fn(u64) -> Arc<V>,
115115
M: OpModel,
116116
{

bench-support/src/workload.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use std::sync::Arc;
88

9-
use cachekit::traits::CoreCache;
9+
use cachekit::traits::Cache;
1010
use rand::rngs::SmallRng;
1111
use rand::{RngExt, SeedableRng};
1212
use rand_distr::{Distribution, Exp, Pareto as ParetoDistr, Zipf};
@@ -495,7 +495,7 @@ pub fn run_hit_rate<C, V, F>(
495495
value_for_key: F,
496496
) -> HitRate
497497
where
498-
C: CoreCache<u64, Arc<V>>,
498+
C: Cache<u64, Arc<V>>,
499499
F: Fn(u64) -> Arc<V>,
500500
{
501501
let mut op_model = ReadThrough::new(1.0, 0);

benches/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ To add a new workload:
176176

177177
### Adding new policies fails
178178
- Check `for_each_policy!` macro syntax
179-
- Verify policy implements `CoreCache<K, V>` trait
179+
- Verify policy implements `Cache<K, V>` trait
180180
- Ensure type parameters match (some policies use `Arc<V>`, others use `V`)
181181

182182
## See Also

benches/comparison.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use cachekit::policy::lru::LruCore;
1818
use cachekit::policy::lru_k::LrukCache;
1919
use cachekit::policy::s3_fifo::S3FifoCache;
2020
use cachekit::policy::two_q::TwoQCore;
21-
use cachekit::traits::CoreCache;
21+
use cachekit::traits::Cache;
2222

2323
const CAPACITY: usize = 4096;
2424
const OPS: u64 = 100_000;

benches/ops.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use cachekit::policy::lru::LruCore;
1818
use cachekit::policy::lru_k::LrukCache;
1919
use cachekit::policy::s3_fifo::S3FifoCache;
2020
use cachekit::policy::two_q::TwoQCore;
21-
use cachekit::traits::CoreCache;
21+
use cachekit::traits::Cache;
2222
use criterion::{Criterion, Throughput, criterion_group, criterion_main};
2323

2424
const CAPACITY: usize = 16_384;

benches/policy/lfu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::sync::Arc;
66

77
use cachekit::ds::FrequencyBucketsHandle;
88
use cachekit::policy::lfu::LfuCache;
9-
use cachekit::traits::{CoreCache, LfuCacheTrait};
9+
use cachekit::traits::Cache;
1010
use criterion::{BatchSize, Criterion, Throughput, criterion_group, criterion_main};
1111

1212
// ============================================================================

benches/policy/lru.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use std::sync::Arc;
66

77
use cachekit::policy::lru::LruCore;
8-
use cachekit::traits::{CoreCache, LruCacheTrait};
8+
use cachekit::traits::Cache;
99
use criterion::{BatchSize, Criterion, Throughput, criterion_group, criterion_main};
1010

1111
// ============================================================================

0 commit comments

Comments
 (0)