#cache #timed #expiry

cache_cache

用于控制和减少IO调用的缓存

2个版本

0.1.1 2023年8月22日
0.1.0 2023年1月13日

#79 in 机器人

Apache-2.0

20KB
195

用于控制和减少IO调用的缓存

Build Status Latest Version

概述

此缓存库已被设计用于特定用例,其中

  • 获取“新鲜”值可能耗时且可能失败(例如,与硬件的IO操作)
  • 一次性获取多个值可能比独立获取每个值更有效。

通常,其主要用途是从多个电机通过串行通信检索位置/速度/温度等。在此配置中,电机是链式连接的,在与其通信的协议中,可以使用特定消息一次性检索多个电机的寄存器值。

存在许多其他缓存实现,可能更适合其他需求。

文档

示例

use cache_cache::Cache;
use std::{error::Error, time::Duration};

fn get_position(ids: &[u8]) -> Result<Vec<f64>, Box<dyn Error>> {
    // For simplicity, this function always work.
    // But it's a mockup for a real world scenario where hardware IO can fail.
    Ok(ids.iter().map(|&id| id as f64 * 10.0).collect())
}

fn main() {
    let mut present_position = Cache::with_expiry_duration(Duration::from_millis(10));

    present_position.insert(10, 0.0);

    let pos = present_position
        .entries(&[10, 11, 12])
        .or_try_insert_with(get_position);

    assert!(pos.is_ok());
    assert_eq!(pos.unwrap(), vec![&0.0, &110.0, &120.0]);
}

有关API和示例的更多信息,请参阅 https://docs.rs/cache_cache

许可

此库根据Apache License 2.0许可。

支持

Pollen-Robotics 开发和维护。他们开发了用于机器人操作的开源工具。访问 https://pollen-robotics.com 了解更多信息或加入我们的Discord社区,如果您有任何问题或想分享您的想法。

无运行时依赖