#cache #refresh #async

async_cache

异步刷新缓存

7 个版本

0.3.1 2024年6月6日
0.3.0 2024年2月21日
0.2.0 2023年12月31日
0.1.4 2023年12月5日
0.1.3 2023年3月23日

#170 in 异步

Download history 1/week @ 2024-05-15 2/week @ 2024-05-29 184/week @ 2024-06-05 7/week @ 2024-06-12 13/week @ 2024-07-03 1/week @ 2024-07-10 5/week @ 2024-07-17 69/week @ 2024-07-24

每月75次下载

MIT/Apache

20KB
304

Async Cache 库

此库提供了一个具有过期时间的异步缓存实现,可用于存储和检索数据。它可以在内存中存储数据,并可以使用自定义数据提取器异步获取数据。

API 概述

pub trait Fetcher<T>
where
    T: Send + Sync + Clone + 'static,
{
    type Error;
    async fn fetch(&self, key: FastStr) -> Result<T>;
}
pub struct Options<T, F> {
    ...
}

impl<T, F> Options<T, F>
where
    T: Send + Sync + Clone + 'static,
    F: Fetcher<T> + Sync + Send + Clone + 'static,
{
    pub fn new(refresh_interval: Duration, fetcher: F) -> Self;

    pub fn with_expire(mut self, expire_interval: Option<Duration>) -> Self;

    pub fn with_error_tx(mut self, tx: mpsc::Sender<(FastStr, anyhow::Error)>) -> Self;

    pub fn with_change_tx(mut self, tx: broadcast::Sender<(FastStr, T, T)>) -> Self;

    pub fn with_delete_tx(mut self, tx: broadcast::Sender<(FastStr, T)>) -> Self;

    pub fn build(self) -> AsyncCache<T, F>;
}
pub struct AsyncCache<T, F> {
    ...
}

impl<T, F> AsyncCache<T, F>
where
    T: Send + Sync + Clone + 'static,
    F: Fetcher<T> + Sync + Send + Clone + 'static,
{
    pub fn set_default(&self, key: FastStr, value: T);

    pub async fn get(&self, key: FastStr) -> Option<T>;

    pub fn get_or_set(&self, key: FastStr, value: T) -> T;

    pub async fn delete(&self, should_delete: impl Fn(&str) -> bool);
}

指南

要使用 AsyncCache,您需要为您想要缓存的类型实现 Fetcher trait。然后,您可以使用 Options 结构来配置缓存并创建一个 AsyncCache 实例。

使用 Options 结构创建 AsyncCache 实例。

let options = Options::new(Duration::from_secs(60), YourFetcher);
let cache = options.build();

然后,您可以通过使用其方法(set_defaultgetget_or_setdelete)与缓存进行交互。

set_default

以下是如何设置键的默认值的示例

cache.set_default(FastStr::from("key"), "default_value".to_string());

这将键 "key" 的默认值设置为 "default_value"。

get

从缓存获取值是通过使用 get 方法异步完成的。它返回一个 Option<T>,其中 T 是缓存中值的类型。如果没有找到键,它将尝试获取它,如果第一次获取失败,则返回 None

let value = cache.get(FastStr::from("key")).await.unwrap();

此操作从缓存中获取 "key" 键的值。

get_or_set

如果您想在缓存中找不到值时设置值,可以使用 get_or_set 方法

let value = cache.get_or_set(FastStr::from("key"), "default_value".to_string());

此操作从缓存中获取 "key" 键的值。如果找不到值,则将其设置为 "default_value"。无论如何,它都返回键的值。

delete

如果您想从缓存中删除数据,可以使用 delete 方法。

cache.delete(|key| key.starts_with("prefix_")).await;

此操作从缓存中删除以 "prefix_" 开头的所有键。

选项

Options 结构用于配置 AsyncCache。它接受 Fetcher trait、刷新间隔和可选的过期间隔。您还可以传入 mpsc 通道以接收错误、值更改或删除。

let options = Options::new(Duration::from_secs(60), YourFetcher)
    .with_expire(Some(Duration::from_secs(60)))
    .with_error_tx(tx)
    .with_change_tx(tx)
    .with_delete_tx(tx);

with_expire 设置缓存的过期间隔。如果未设置,则默认的过期间隔为180秒。

with_error_tx 设置接收错误的mpsc通道。

with_change_tx 设置接收值变化的广播通道。

with_delete_tx 设置接收删除操作的广播通道。

许可证

异步缓存库采用MIT或Apache-2.0许可证。

依赖项

~5–12MB
~122K SLoC