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 异步
每月75次下载
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_default
、get
、get_or_set
和 delete
)与缓存进行交互。
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