#lru-cache #associative #lru #memory-mapping #key-value #data-structures #direct-mapped

associative-cache

A generic N-way associative cache with fixed-size capacity and random or least recently used (LRU) replacement

3 stable releases

2.0.0 May 11, 2023
1.0.1 Sep 18, 2019

#44 in Caching

Download history 3787/week @ 2024-07-26 2669/week @ 2024-08-02 2588/week @ 2024-08-09 2554/week @ 2024-08-16 3153/week @ 2024-08-23 2845/week @ 2024-08-30 3171/week @ 2024-09-06 2932/week @ 2024-09-13 2988/week @ 2024-09-20 2956/week @ 2024-09-27 2706/week @ 2024-10-04 2906/week @ 2024-10-11 5892/week @ 2024-10-18 2974/week @ 2024-10-25 3503/week @ 2024-11-01 2927/week @ 2024-11-08

15,815 downloads per month
Used in 58 crates (3 directly)

MIT/Apache

67KB
1K SLoC

associative_cache

A generic, fixed-size, associative cache data structure mapping K keys to V values.

Capacity

The cache has a constant, fixed-size capacity which is controlled by the C type parameter and the Capacity trait. The memory for the cache entries is eagerly allocated once and never resized.

Associativity

The cache can be configured as direct-mapped, two-way associative, four-way associative, etc... via the I type parameter and Indices trait.

Replacement Policy

The cache can be configured to replace the least recently used (LRU) entry, or a random entry via the R type parameter and the Replacement trait.

Examples

use associative_cache::*;

// A two-way associative cache with random replacement mapping
// `String`s to `usize`s.
let cache = AssociativeCache::<
    String,
    usize,
    Capacity512,
    HashTwoWay,
    RandomReplacement
>::default();

// A four-way associative cache with random replacement mapping
// `*mut usize`s to `Vec<u8>`s.
let cache = AssociativeCache::<
    *mut usize,
    Vec<u8>,
    Capacity32,
    PointerFourWay,
    RandomReplacement
>::default();

// An eight-way associative, least recently used (LRU) cache mapping
// `std::path::PathBuf`s to `std::fs::File`s.
let cache = AssociativeCache::<
    std::path::PathBuf,
    WithLruTimestamp<std::fs::File>,
    Capacity128,
    HashEightWay,
    LruReplacement,
>::default();

Dependencies

~73KB