#cache #remember #memory #performance #forget

cacheapp

灵感来源于 Laravel 的缓存 remember forever

1 个不稳定版本

0.1.3 2023年6月17日

#255缓存

MIT 许可证

13KB
215

CACHE APP: README.md

CACHE APP 是一个稳定的缓存 remember crate 迁移

资源 链接
crate 版本 Crates.io
文档 Cargo 文档

[0.1.0] - 2023-06-11

Cache App 是一个简单的 Rust 缓存库,允许您缓存函数调用的结果一段时间。灵感来源于 Laravel 的缓存 remember。

remember 函数使用一个异步函数作为其参数之一,该函数必须返回一个实现了 Deserialize 和 Serialize(来自 serde)的值。如果存在缓存值,则返回该值而不执行函数,否则将执行函数并将结果存储在缓存中以供未来的查询。

[0.1.2] - 2023-06-11

在 forget()、forget_all() 和 purge() 函数中删除不必要的异步操作并返回结果。

[0.1.3] - 2023-06-11

将 Box dyn std::error::Error 更改为接受任何实现了 Display 特质的 Error 作为返回值的函数。将 Mutex 更改为 RwLock 以允许多个同时读取。

示例

    use cacheapp::Cache;
    use std::thread;
    use std::time::Duration;
    use serde::{Deserialize, Serialize};
    use tokio;

    #[derive(Debug, Serialize, Deserialize, Clone)]
    pub struct User {
        pub name: String,
        pub email: String,
    }

    pub async fn get_user() -> Result<User, Box<dyn std::error::Error>> {
        thread::sleep(Duration::from_secs(1));
        Ok(User {
            name: "Joel Torres".to_string(),
            email: "[email protected]".to_string(),
        })
    }

    fn main() {
            // Create a new cache instance
            let cache = Cache::new();
            // Get the result of the function call
            let fun = get_user();
            let hours : u64 = 1;
            let result = cache.remember("test_remember", hours, fun).await.unwrap();
            println!("{:?}", result);

            //forget the cache
            cache.forget("test_remember");

            // remember forever
            let fun = get_user();
            let result = cache.remember_forever("test_remember", fun).await.unwrap();
            println!("{:?}", result);

            //forget all cache
            cache.forget_all();
            println!("{:?}", cache);

            //purge expired records in cache
            cache.purge();
    }

依赖项

~1.1–7MB
~46K SLoC