54 个版本

使用旧 Rust 2015

0.12.4 2024 年 7 月 31 日
0.12.3 2024 年 2 月 24 日
0.12.2 2024 年 1 月 28 日
0.12.1 2023 年 11 月 22 日
0.1.1 2016 年 12 月 31 日

#2缓存

Download history 706471/week @ 2024-05-04 770618/week @ 2024-05-11 774178/week @ 2024-05-18 798125/week @ 2024-05-25 1005053/week @ 2024-06-01 998300/week @ 2024-06-08 975299/week @ 2024-06-15 1053629/week @ 2024-06-22 977788/week @ 2024-06-29 1025242/week @ 2024-07-06 1033020/week @ 2024-07-13 1078245/week @ 2024-07-20 1072106/week @ 2024-07-27 1052578/week @ 2024-08-03 1124481/week @ 2024-08-10 948556/week @ 2024-08-17

4,389,132 每月下载量
2,667 个 Crates 中使用 (346 个直接使用)

MIT 许可证

90KB
1.5K SLoC

LRU 缓存

Build Badge Codecov Badge crates.io Badge docs.rs Badge License Badge

文档

LRU 缓存的实现。缓存支持 putgetget_mutpop 操作,所有操作均为 O(1)。此crate受到了 Rust std::collections crate 早期版本中 LRU 缓存实现的强烈影响。

此crate的最小支持Rust版本为1.64.0。

示例

以下是一个如何实例化和使用LRU缓存的简单示例。

extern crate lru;

use lru::LruCache;
use std::num::NonZeroUsize;

fn main() {
    let mut cache = LruCache::new(NonZeroUsize::new(2).unwrap());
    cache.put("apple", 3);
    cache.put("banana", 2);

    assert_eq!(*cache.get(&"apple").unwrap(), 3);
    assert_eq!(*cache.get(&"banana").unwrap(), 2);
    assert!(cache.get(&"pear").is_none());

    assert_eq!(cache.put("banana", 4), Some(2));
    assert_eq!(cache.put("pear", 5), None);

    assert_eq!(*cache.get(&"pear").unwrap(), 5);
    assert_eq!(*cache.get(&"banana").unwrap(), 4);
    assert!(cache.get(&"apple").is_none());

    {
        let v = cache.get_mut(&"banana").unwrap();
        *v = 6;
    }

    assert_eq!(*cache.get(&"banana").unwrap(), 6);
}

依赖项

~2MB
~25K SLoC