#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 26/week @ 2024-05-08 91/week @ 2024-05-15 40/week @ 2024-05-22 39/week @ 2024-05-29 60/week @ 2024-06-05 136/week @ 2024-06-12 49/week @ 2024-06-19 166/week @ 2024-06-26 14/week @ 2024-07-03 11/week @ 2024-07-10 1/week @ 2024-07-17 17/week @ 2024-07-24 33/week @ 2024-07-31 2/week @ 2024-08-07 5/week @ 2024-08-14

每月 下载 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