#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 585/week @ 2024-03-13 685/week @ 2024-03-20 632/week @ 2024-03-27 489/week @ 2024-04-03 447/week @ 2024-04-10 441/week @ 2024-04-17 483/week @ 2024-04-24 493/week @ 2024-05-01 373/week @ 2024-05-08 433/week @ 2024-05-15 374/week @ 2024-05-22 379/week @ 2024-05-29 350/week @ 2024-06-05 305/week @ 2024-06-12 319/week @ 2024-06-19 244/week @ 2024-06-26

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