2个版本
0.1.1 | 2023年8月22日 |
---|---|
0.1.0 | 2023年1月13日 |
#79 in 机器人
20KB
195 行
用于控制和减少IO调用的缓存
概述
此缓存库已被设计用于特定用例,其中
- 获取“新鲜”值可能耗时且可能失败(例如,与硬件的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社区,如果您有任何问题或想分享您的想法。