2 个不稳定版本
0.2.0 | 2024年6月27日 |
---|---|
0.1.0 | 2023年5月16日 |
#74 在 缓存
每月 下载 57 次
11KB
156 代码行
ttl_cache_with_purging
带可选后台清理的过期条目的生存时间(TTL)缓存实现。
动机
我们需要一个缓存实现,它不会返回过期条目,同时还可以防止过期条目不必要地膨胀缓存大小。
方法
此 TTL 缓存包括一个后台清理线程,该线程将在指定的时间间隔内删除过期的缓存条目。清理线程使用 tokio
利用其优先写 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();
}
许可证
许可以下任一项
- Apache 许可证第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则您提交的任何有意包含在作品中的贡献,如 Apache-2.0 许可证中定义的,应如上双许可,无任何额外条款或条件。
行为准则
所有行为均受 Rust 行为准则 的约束。
依赖关系
~2.2–3.5MB
~63K SLoC