concurrent_lru 0.2.0

A concurrent LRU cache
Documentation
  • Coverage
  • 50%
    12 out of 24 items documented1 out of 22 items with examples
  • Size
  • Source code size: 35.19 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 581.65 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 10s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • ngkv/concurrent_lru
    23 2 1
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • zhongjn

Concurrent LRU

crates.io Badge docs.rs Badge License Badge

An implementation of a concurrent LRU cache. It is designed to hold heavyweight resources, e.g. file descriptors, disk pages. The implementation is heavily influenced by the LRU cache in LevelDB.

Currently there are two implementations, unsharded and sharded.

  • unsharded is a linked hashmap protected by a big lock.
  • sharded shards unsharded by key, providing better performance under contention.

Example

use concurrent_lru::sharded::LruCache;
use std::{fs, io};

fn read(_f: &fs::File) -> io::Result<()> {
    // Maybe some positioned read...
    Ok(())
}

fn main() -> io::Result<()> {
    let cache = LruCache::<String, fs::File>::new(10);

    let foo_handle = cache.get_or_try_init("foo".to_string(), 1, |name| {
        fs::OpenOptions::new().read(true).open(name)
    })?;
    read(foo_handle.value())?;
    drop(foo_handle); // Unpin foo file.

    // Foo is in the cache.
    assert!(cache.get("foo".to_string()).is_some());

    // Evict foo manually.
    cache.prune();
    assert!(cache.get("foo".to_string()).is_none());

    Ok(())
}

Contribution

Contributions are welcome! Please fork the library, push changes to your fork, and send a pull request. All contributions are shared under an MIT license unless explicitly stated otherwise in the pull request.

Performance

TODO