#lru-cache #thread-safe #weight #size #object

multicache

每个对象都有一个给定权重的LRU缓存

12个版本

0.6.1 2020年2月1日
0.6.0 2019年8月26日
0.5.0 2018年8月17日
0.4.1 2017年8月18日
0.1.1 2017年1月30日

#134 in 缓存

Download history • Rust 包仓库 585/week @ 2024-03-13 • Rust 包仓库 685/week @ 2024-03-20 • Rust 包仓库 632/week @ 2024-03-27 • Rust 包仓库 489/week @ 2024-04-03 • Rust 包仓库 447/week @ 2024-04-10 • Rust 包仓库 441/week @ 2024-04-17 • Rust 包仓库 483/week @ 2024-04-24 • Rust 包仓库 493/week @ 2024-05-01 • Rust 包仓库 373/week @ 2024-05-08 • Rust 包仓库 433/week @ 2024-05-15 • Rust 包仓库 374/week @ 2024-05-22 • Rust 包仓库 379/week @ 2024-05-29 • Rust 包仓库 350/week @ 2024-06-05 • Rust 包仓库 305/week @ 2024-06-12 • Rust 包仓库 319/week @ 2024-06-19 • Rust 包仓库 244/week @ 2024-06-26 • Rust 包仓库

1,356 每月下载
12 个crate中使用 (2 个直接使用)

LGPL-3.0-only

9KB
151

一个缓存,将跟踪放入元素的总体大小,并基于该值进行驱逐。缓存是线程安全的,并返回Arc引用。

使用方法

extern crate multicache;
use multicache::MultiCache;
use std::sync::Arc;

fn main() {
  let cache = MultiCache::new(200);

  cache.put(0, 0, 100);
  cache.put(1, 1, 100);
  cache.put(2, 2, 100);

  assert_eq!(cache.get(0), None);
  assert_eq!(cache.get(1), Some(Arc::new(1)));
  assert_eq!(cache.get(2), Some(Arc::new(2)));
}

进行get操作会将值提升为最后被驱逐的值

extern crate multicache;
use multicache::MultiCache;
use std::sync::Arc;

fn main() {
  let cache = MultiCache::new(200);

  cache.put(0, 0, 100);
  cache.put(1, 1, 100);
  cache.get(0);
  cache.put(2, 2, 100);

  assert_eq!(cache.get(0), Some(Arc::new(0)));
  assert_eq!(cache.get(1), None);
  assert_eq!(cache.get(2), Some(Arc::new(2)));
}

lib.rs:

一个缓存,将跟踪放入元素的总体大小,并基于该值进行驱逐。缓存是线程安全的,并返回Arc引用。

示例

 extern crate multicache;
 use multicache::MultiCache;
 use std::sync::Arc;

 fn main() {
   let cache = MultiCache::new(200);

   cache.put(0, 0, 100);
   cache.put(1, 1, 100);
   cache.put(2, 2, 100);

   assert_eq!(cache.get(&0), None);
   assert_eq!(cache.get(&1), Some(Arc::new(1)));
   assert_eq!(cache.get(&2), Some(Arc::new(2)));
 }

进行get操作会将值提升为最后被驱逐的值

 extern crate multicache;
 use multicache::MultiCache;
 use std::sync::Arc;

 fn main() {
   let cache = MultiCache::new(200);

   cache.put(0, 0, 100);
   cache.put(1, 1, 100);
   cache.get(&0);
   cache.put(2, 2, 100);

   assert_eq!(cache.get(&0), Some(Arc::new(0)));
   assert_eq!(cache.get(&1), None);
   assert_eq!(cache.get(&2), Some(Arc::new(2)));
 }

依赖

~49KB