#持久 #缓存 #hpc #memoization

nightly persistentcache

用于通过文件或 Redis 持久缓存函数调用的宏

7 个版本

使用旧 Rust 2015

0.1.6 2018年6月2日
0.1.5 2018年3月17日
0.1.2 2017年12月6日
0.1.1 2017年11月24日

#219 in 缓存

MIT/Apache

38KB
490

Build Status

persistentcache-rs

persistentcache-rs 实现了宏 cache!cache_func! 以及过程宏 #[peristent_cache] 以缓存函数调用或整个函数。实现的存储是持久的,并且可以在进程之间共享。存储要么在磁盘上(FileStorage)要么在 Redis(RedisStorage)上。

文档和示例可以在这里找到。

示例

以下是一个使用 #[peristent_cache] 过程宏的示例

#![feature(proc_macro)]
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate persistentcache;
extern crate persistentcache_procmacro;
use persistentcache::*;
use persistentcache::storage::{FileStorage, RedisStorage};
use persistentcache_procmacro::persistent_cache;

// Either store it in a `FileStorage`...
#[persistent_cache]
#[params(FileStorage, "test_dir")]
fn add_two_file(a: u64) -> u64 {
    println!("Calculating {} + 2...", a);
    a + 2
}

// ... or in a `RedisStorage`
#[persistent_cache]
#[params(RedisStorage, "redis://127.0.0.1")]
fn add_two_redis(a: u64) -> u64 {
    println!("Calculating {} + 2...", a);
    a + 2
}

fn main() {
    // Function is called and will print "Calculating 2 + 2..." and "4"
    println!("{}", add_two_file(2));
    // Value will be cached from Redis, will only print "4"
    println!("{}", add_two_file(2));
    // Function is called and will print "Calculating 3 + 2..." and "5"
    println!("{}", add_two_redis(3));
    // Value will be cached from Redis, will only print "5"
    println!("{}", add_two_redis(3));
}

这将打印

Calculating 2 + 2...
4
4
Calculating 3 + 2...
5
5

历史记录

这个 crate 受 owls-cache 启发,其主要目标是自学 Rust。在开发过程中,我发现已经存在类似的 crate:cached-rs。我从那里借鉴了一些想法。我建议你也看看 cached-rs crate。不幸的是,它缺少“持久”部分,并且缓存无法在进程/线程之间共享,但它应该很容易扩展。此外,出色的 accel 也非常有帮助。我为 persistentcache_procmacro crate 不加掩饰地复制了其中的部分。

许可证

根据您的选择,许可协议为

贡献

除非您明确说明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,应作为上述双重许可,不附加任何其他条款或条件。

依赖项

~11MB
~248K SLoC