#cache #ttl #expire #expiring

ttl_cache_with_purging

带可选后台清理的过期条目的生存时间(TTL)缓存实现

2 个不稳定版本

0.2.0 2024年6月27日
0.1.0 2023年5月16日

#74缓存

Download history · Rust 包仓库 26/week @ 2024-05-08 · Rust 包仓库 91/week @ 2024-05-15 · Rust 包仓库 40/week @ 2024-05-22 · Rust 包仓库 39/week @ 2024-05-29 · Rust 包仓库 60/week @ 2024-06-05 · Rust 包仓库 136/week @ 2024-06-12 · Rust 包仓库 49/week @ 2024-06-19 · Rust 包仓库 166/week @ 2024-06-26 · Rust 包仓库 14/week @ 2024-07-03 · Rust 包仓库 11/week @ 2024-07-10 · Rust 包仓库 1/week @ 2024-07-17 · Rust 包仓库 17/week @ 2024-07-24 · Rust 包仓库 33/week @ 2024-07-31 · Rust 包仓库 2/week @ 2024-08-07 · Rust 包仓库 5/week @ 2024-08-14 · Rust 包仓库

每月 下载 57

MIT/Apache

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.0 许可证中定义的,应如上双许可,无任何额外条款或条件。

行为准则

所有行为均受 Rust 行为准则 的约束。

依赖关系

~2.2–3.5MB
~63K SLoC