Crates.io | ttl_cache_with_purging |
lib.rs | ttl_cache_with_purging |
version | 0.2.0 |
source | src |
created_at | 2023-05-16 15:54:58.417183 |
updated_at | 2024-06-27 22:59:54.290015 |
description | A time-to-live (TTL) cache implementation with optional background purging for expired entries. |
homepage | https://aembit.io/ |
repository | https://github.com/Aembit/ttl_cache_with_purging |
max_upload_size | |
id | 866185 |
size | 27,210 |
A time-to-live (TTL) cache implementation with optional background purging for expired entries.
We needed a caching implementation that would not return expired entries, while also preventing expired entries from unnecessarily inflating the cache size.
This TTL cache includes a background purge thread that will remove expired
cache entries on a specified interval. The purge thread uses tokio
to take
advantage of its write-preferring RwLock
.
use std::{sync::Arc, time::Duration};
use tokio::{
sync::RwLock,
time::{interval, Instant},
};
use ttl_cache_with_purging::{cache::TtlCache, purging::start_periodic_purge};
const MIN_IN_SECS: u64 = 60;
const HOUR_IN_SECS: u64 = 60 * MIN_IN_SECS;
#[tokio::main(flavor = "current_thread")]
async fn main() {
// Cache setup
let cache = Arc::new(RwLock::new(TtlCache::new()));
let purge_interval = interval(Duration::from_secs(MIN_IN_SECS));
start_periodic_purge(cache.clone(), purge_interval);
// Add entries
let key = "key1";
let val = "val1";
let expires_at = Instant::now()
.checked_add(Duration::from_secs(HOUR_IN_SECS))
.unwrap();
cache.write().await.insert(key, val, expires_at);
// Read entries
let _cached_val = cache.read().await.get(key).unwrap();
let (_cached_val, _expires_at) = cache.read().await.get_value_and_expiration(key).unwrap();
}
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
All behavior is governed by the Rust Code of Conduct.