[−][src]Crate aba_cache
In-Process In-Memory Cache implementation.
Supported eviction strategy:
- LRU (Least Recently Used, inspired by LRU Cache)
- LFU (Least Frequently Used, TBD)
- MRU (Most Recently Used, TBD)
- FIFO (First In First Out, TBD)
Supporting async/.await powered by tokio runtime.
Caveat
If you need to use non-asynchronous, just disable default feature for this crate on your Cargo.toml
If you do need to use reference for your value, on non-asynchronous do use std::rc::Rc
,
and on asynchronous do use std::sync::Arc
Example basic
Cargo.toml
[dependencies]
aba-cache = { version = "0.1", default-features = false }
serde_json = { version = "1.0" }
main.rs
use aba_cache as cache; use cache::LruCache; use serde_json::{self, Value}; use std::rc::Rc; // create cache with multiply_cap 1024, and evicting // LRU entry with age 15 minutes or older let mut cache = LruCache::new(1024, 15 * 60); let val_one: Rc<Value> = Rc::new(serde_json::from_str(r#"{"id":1}"#).unwrap()); let val_two: Rc<Value> = Rc::new(serde_json::from_str(r#"{"id":2}"#).unwrap()); cache.put("one", val_one.clone()); cache.put("two", val_two.clone()); assert!( if let Some(value) = cache.get(&"one") { *value == val_one } else { false } ); assert_eq!(cache.get(&"three"), None);
Example async
Cargo.toml
aba-cache = { version = "0.1", default-features = false }
serde_json = { version = "1.0" }
tokio = { version = "0.2", features = ["macros", "rt-core"] }
main.rs
use aba_cache as cache; use cache::LruAsyncCache; use serde_json::{self, Value}; use std::sync::Arc; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // create cache with multiply_cap 1024, and evicting // LRU entry with age 15 minutes or older let cache = LruAsyncCache::new(1024, 15 * 60); let val_one: Arc<Value> = Arc::new(serde_json::from_str(r#"{"id":1}"#)?); let val_two: Arc<Value> = Arc::new(serde_json::from_str(r#"{"id":2}"#)?); cache.put("one", val_one.clone()).await; cache.put("two", val_two.clone()).await; assert!( if let Some(value) = cache.get(&"one").await { value == val_one } else { false } ); assert_eq!(cache.get(&"three").await, None); Ok(()) }
Structs
LruAsyncCache | Async version of Cache with LRU eviction strategy |
LruCache | Cache with LRU eviction strategy |