#cache #redis #client #back-end #applications #async-task #execute

rdcache

使用 Redis 后端的一个简单缓存

3 个版本

0.1.2 2024 年 7 月 27 日
0.1.1 2024 年 7 月 26 日
0.1.0 2024 年 7 月 26 日

#1474数据库接口

Download history 255/week @ 2024-07-21 126/week @ 2024-07-28 1/week @ 2024-08-04

每月 382 次下载

Apache-2.0

17KB
372 代码行

rdcache

Crates.io MIT/Apache-2 licensed

Rust 版本的 rockscache

特性

  • 在相同时间只对相同键执行一次异步任务,不同的应用程序。
  • 使用 MessagePack 缓存数据。

示例

use std::time::Duration;

use rdcache::{Client, Options};
use rustis::client::Client as RedisClient;

#[tokio::main]
async fn main() {
    let rdb = RedisClient::connect("127.0.0.1:6379").await.unwrap();
    let client = Client::new(rdb, Options::default());

    let key = "key";

    let r = client
        .fetch(key, Duration::from_secs(600), || async {
            println!("Fetching data from the database");
            Ok(Some("data".to_string()))
        })
        .await;

    println!("{:?}", r);

    client.tag_as_deleted(key).await.unwrap();

    let r = client
        .fetch(key, Duration::from_secs(600), || async {
            println!("Fetching data from the database");
            Ok(Some("data2".to_string()))
        })
        .await;

    println!("{:?}", r);
}

输出将类似于

Fetching data from the database
Ok(Some("data"))
Fetching data from the database
Ok(Some("data2"))

依赖

~9–19MB
~275K SLoC