MCPcopy Index your code
hub / github.com/OxidizeLabs/cachekit

github.com/OxidizeLabs/cachekit @v0.8.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.8.0 ↗ · + Follow
2,756 symbols 9,247 edges 118 files 649 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

cachekit

CI Crates.io Docs MSRV License: MIT License: Apache-2.0

High-performance cache policies and supporting data structures for Rust systems with optional metrics and benchmarks.

Why CacheKit

  • Pluggable eviction policies with predictable performance characteristics.
  • Unified builder API plus direct access for policy-specific operations.
  • Optional metrics and benchmarks to validate trade-offs.

Table of Contents

Overview

CacheKit is a Rust library that provides:

  • High-performance cache replacement policies (e.g., FIFO, LRU, Fast LRU, LRU-K, ARC, CAR, Clock, NRU, S3-FIFO, SLRU, 2Q, and more).
  • Supporting data structures and policy primitives for building caches.
  • Optional metrics and benchmark harnesses.
  • A modular API suitable for embedding in systems where control over caching behavior is critical.

This crate is designed for systems programming, microservices, and performance-critical applications.

Features

  • Policy implementations optimized for performance and predictability.
  • Optional integration with metrics collectors (e.g., Prometheus/metrics crates).
  • Benchmarks to compare policy performance under real-world workloads.

Installation

Add cachekit as a dependency in your Cargo.toml:

[dependencies]
cachekit = "0.8.0"

From source:

[dependencies]
cachekit = { git = "https://github.com/OxidizeLabs/cachekit" }

Quick Start

Using the Builder (Recommended)

The CacheBuilder provides a unified API for creating caches with any eviction policy:

use cachekit::builder::{CacheBuilder, CachePolicy};

fn main() {
    // Create an LRU cache with a capacity of 100 entries
    let mut cache = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Lru);

    // Insert items
    cache.insert(1, "value1".to_string());
    cache.insert(2, "value2".to_string());

    // Retrieve an item
    if let Some(value) = cache.get(&1) {
        println!("Got from cache: {}", value);
    }

    // Check existence and size
    assert!(cache.contains(&1));
    assert_eq!(cache.len(), 2);
}

Feature Flags

General

Feature Enables
metrics Hit/miss metrics and snapshots
concurrency Concurrent wrappers (requires parking_lot)

Per-Policy (Eviction Policies)

Each eviction policy is gated behind a feature flag. Use default-features = false and enable only the policies you need for smaller builds.

Feature Policy Description
policy-fifo FIFO First In, First Out
policy-lru LRU Least Recently Used (Arc-wrapped, concurrent wrapper available)
policy-fast-lru Fast LRU Optimized single-threaded LRU (~7–10× faster than LRU)
policy-lru-k LRU-K Scan-resistant with K-th access
policy-lfu LFU Least Frequently Used (bucket-based)
policy-heap-lfu Heap LFU LFU with heap-based eviction
policy-two-q 2Q Two-Queue
policy-s3-fifo S3-FIFO Scan-resistant three-queue FIFO
policy-arc ARC Adaptive Replacement Cache
policy-car CAR Clock with Adaptive Replacement
policy-lifo LIFO Last In, First Out
policy-mfu MFU Most Frequently Used
policy-mru MRU Most Recently Used
policy-random Random Random eviction
policy-slru SLRU Segmented LRU
policy-clock Clock Second-chance clock
policy-clock-pro Clock-PRO Scan-resistant clock
policy-nru NRU Not Recently Used

Convenience: policy-all enables every policy above.

# Minimal build: only LRU and S3-FIFO
cachekit = { version = "0.6", default-features = false, features = ["policy-lru", "policy-s3-fifo"] }

Available Policies

All policies are available through the unified builder API. Enable the corresponding feature flag for each policy (e.g. policy-lru for CachePolicy::Lru). See Feature Flags above.

use cachekit::builder::{CacheBuilder, CachePolicy};

// FIFO - First In, First Out
let fifo = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Fifo);

// LRU - Least Recently Used
let lru = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Lru);

// Fast LRU - single-threaded optimized LRU (no Arc on values)
let fast_lru = CacheBuilder::new(100).build::<u64, String>(CachePolicy::FastLru);

// LRU-K - Scan-resistant LRU (K=2 is common)
let lru_k = CacheBuilder::new(100).build::<u64, String>(CachePolicy::LruK { k: 2 });

// LFU - Least Frequently Used (bucket-based, O(1))
let lfu = CacheBuilder::new(100).build::<u64, String>(
    CachePolicy::Lfu { bucket_hint: None }
);

// HeapLFU - Least Frequently Used (heap-based, O(log n))
let heap_lfu = CacheBuilder::new(100).build::<u64, String>(CachePolicy::HeapLfu);

// 2Q - Two-Queue with configurable probation fraction
let two_q = CacheBuilder::new(100).build::<u64, String>(
    CachePolicy::TwoQ { probation_frac: 0.25 }
);

// S3-FIFO - Scan-resistant FIFO with small + ghost ratios
let s3_fifo = CacheBuilder::new(100).build::<u64, String>(
    CachePolicy::S3Fifo { small_ratio: 0.1, ghost_ratio: 0.9 }
);

// ARC - Adaptive Replacement Cache (recency vs frequency)
let arc = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Arc);

// LIFO - Last In, First Out (stack-like eviction)
let lifo = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Lifo);

// MFU - Most Frequently Used (evicts hot items)
let mfu = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Mfu);

// MRU - Most Recently Used (evicts recently accessed)
let mru = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Mru);

// Random - Uniform random eviction
let random = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Random);

// SLRU - Segmented LRU with probationary/protected segments
let slru = CacheBuilder::new(100).build::<u64, String>(
    CachePolicy::Slru { probationary_frac: 0.25 }
);

// Clock - Approximate LRU with reference bits (lower overhead)
let clock = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Clock);

// Clock-PRO - Scan-resistant Clock variant
let clock_pro = CacheBuilder::new(100).build::<u64, String>(CachePolicy::ClockPro);

// NRU - Not Recently Used (simple reference bit tracking)
let nru = CacheBuilder::new(100).build::<u64, String>(CachePolicy::Nru);

Policy Selection Guide

Policy Best For Eviction Basis
FIFO Simple, predictable workloads Insertion order
LRU Temporal locality Recency
Fast LRU Single-threaded hot paths Recency (lower overhead)
LRU-K Scan-resistant workloads K-th access time
LFU Stable access patterns Frequency (O(1))
HeapLFU Large caches, frequent evictions Frequency (O(log n))
2Q Mixed workloads Two-queue promotion
S3-FIFO Scan-heavy workloads FIFO + ghost history
ARC Mixed / unknown workloads Adaptive recency + frequency
CAR Adaptive caching with Clock-style scanning Clock + ARC-like segments
LIFO Stack-like caching Reverse insertion order
MFU Inverse frequency patterns Highest frequency
MRU Anti-recency patterns Most recent access
Random Baseline/uniform distribution Random selection
SLRU Scan resistance Segmented LRU
Clock Low-overhead LRU approximation Reference bits + hand
ClockPro Scan-resistant Clock variant Clock + ghost history
NRU Simple coarse tracking Reference bits (binary)

See Choosing a policy for benchmark-driven guidance.

Direct Policy Access

For advanced use cases requiring policy-specific operations, use the underlying implementations directly:

use std::sync::Arc;
use cachekit::policy::lru::LruCore;
use cachekit::traits::Cache;

fn main() {
    // LRU with policy-specific operations
    let mut lru_cache: LruCore<u64, &str> = LruCore::new(100);
    lru_cache.insert(1, Arc::new("value"));

    // Access LRU-specific methods
    if let Some((key, _)) = lru_cache.peek_lru() {
        println!("LRU key: {}", key);
    }
}

Next Steps

Extension points exported contracts — how you extend this code

Cache (Interface)
Universal cache operations that all policies implement. This is the primary user-facing trait. Code written against `Ca [20 …
src/traits.rs
CoreMetricsRecorder (Interface)
# Metrics Trait Hierarchy This module mirrors the cache trait design by separating *recording*, snapshotting*, and *exp [14 …
src/metrics/traits.rs
ConcurrentStoreRead (Interface)
Read-only store operations for concurrent backends. Returns `Arc ` because borrowed references cannot outlive lock gu [5 …
src/store/traits.rs
OpModel (Interface)
(no doc) [5 implementers]
bench-support/src/operation.rs
EvictingCache (Interface)
Explicitly evict one entry according to the policy. Not all policies expose this; some (ARC, CAR, NRU, Random, SLRU, 2Q [13 …
src/traits.rs
MetricsSnapshotProvider (Interface)
Snapshot provider for bench/testing. Returns a point-in-time copy of all counters as a snapshot struct `S`. Pair with [ [22 …
src/metrics/traits.rs
ConcurrentStore (Interface)
Mutable store operations for concurrent backends. Extends [`ConcurrentStoreRead`] with write operations using interior [5 …
src/store/traits.rs
VictimInspectable (Interface)
Read-only peek at the next eviction candidate. Only implemented by policies where the victim is cheap and stable to ide [10 …
src/traits.rs

Core symbols most depended-on inside this repo

insert
called by 437
src/policy/lru.rs
insert
called by 378
src/builder.rs
metric_name
called by 224
src/metrics/exporter.rs
write_counter
called by 195
src/metrics/exporter.rs
get
called by 182
src/builder.rs
clone
called by 147
src/policy/mfu.rs
insert
called by 144
src/policy/lfu.rs
get
called by 139
src/policy/lru.rs

Shape

Function 1,352
Method 1,125
Class 219
Interface 38
Enum 22

Languages

Rust100%

Modules by API surface

src/policy/lru.rs284 symbols
src/ds/clock_ring.rs137 symbols
src/policy/s3_fifo.rs114 symbols
src/policy/slru.rs98 symbols
src/ds/slot_arena.rs97 symbols
src/ds/frequency_buckets.rs94 symbols
src/metrics/metrics_impl.rs93 symbols
src/ds/ghost_list.rs93 symbols
src/ds/intrusive_list.rs88 symbols
src/policy/two_q.rs85 symbols
src/policy/lru_k.rs80 symbols
src/policy/random.rs76 symbols

For agents

$ claude mcp add cachekit \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page