#cache #rom #cpu #memory #ram #data #store

rom_cache

内存中缓存 ROM,类似于 CPU 缓存 RAM

12 个版本

0.0.10 2024 年 8 月 6 日
0.0.9 2024 年 8 月 1 日
0.0.4 2024 年 7 月 31 日

#66缓存

Download history 868/week @ 2024-07-26 305/week @ 2024-08-02 37/week @ 2024-08-09

1,210 每月下载量
encrypt_config 中使用

MIT 许可证

24KB
358

Contributors Forks Stargazers Issues MIT License


rom-cache

一个 Rust 包,用于在内存中缓存 ROM,类似于 CPU 缓存 RAM。
探索文档 »

查看演示 · 报告错误 · 请求功能

目录
  1. 导入
  2. 关于项目
  3. 使用方法
  4. 变更日志
  5. 路线图
  6. 贡献
  7. 许可证
  8. 联系方式
  9. 鸣谢

导入

[dependencies]
rom_cache = { version = "0.0.10" }

关于项目

一个 Rust 包,用于在内存中缓存 ROM,类似于 CPU 缓存 RAM。

提供了 Cacheable 特性,以便用户定义如何 加载存储 数据在二级存储中。

Cache 是本包的主要入口点,它由 CacheGroup 组成。而 CacheGroupCacheLine 组成。

Cache::get::<T>()Cache::get_mut::<T>() 提供从缓存和存储中检索数据。使用 LRU 选择用于 TCacheLine

  1. get
  • 缓存命中:返回 CacheRef
  • 缓存忙碌:返回 CacheError::Busy,LRU 选择 CacheLine 正在被写入或读取,因此无法替换。
  • 缓存锁定:返回 CacheError::Locked,在写入时无法读取 T
  1. get_mut
  • 缓存命中:返回 CacheMut,并解引用 CacheMut 将设置 CacheLine 为脏。
  • 缓存忙碌:返回 CacheError::Busy,无法替换正在使用的 LRU 选择 CacheLine
  • 缓存锁定:返回 CacheError::Locked,在读取或写入时无法写入 T

任何脏的 CacheLine(缓存行)将在被驱逐或 Cache 丢弃时写回二级存储(Cacheable::store())。

特性

  • nightly:启用 #![feature(trait_upcasting)] 以简化 Cacheable 特性。(需要 Nightly Rust)

(返回顶部)

构建工具

  • Rust
  • Miri(测试)
  • Loom(并发测试)

(返回顶部)

使用方法

示例

# use rom_cache::Cache;
// e.g 2-way set associative cache (8 sets/groups)
let cache: Cache<8, 2> = Default::default();
cache.get::<isize>().unwrap();
cache.get::<String>().unwrap();
{
    let mut s = cache.get_mut::<String>().unwrap();
    cache.get::<u64>().unwrap();
    cache.get::<usize>().unwrap();
    *s = "".to_string();    // set dirty
}
{
    let s = cache.get::<String>().unwrap(); // other threads may evict `String` and it's stored,
                                            // this will load it back
    assert_eq!(*s, "");                     // The `load` result is `""`
}

更多示例,请参阅测试示例文档

(返回顶部)

变更日志

待办事项

更详细的变更日志

(返回顶部)

路线图

  • 允许并发访问
  • 获取时自动加载
  • 基准测试

贡献

贡献使得开源社区成为一个学习、灵感和创作的绝佳场所。您做出的任何贡献都将被高度赞赏。

如果您有改进此项目的建议,请fork仓库并创建一个pull request。您也可以简单地打开一个带有“enhancement”标签的问题。别忘了为项目点个star!再次感谢!

  1. fork项目
  2. 创建您的功能分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m '添加一些AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 打开pull request

(返回顶部)

许可证

在MIT许可证下分发。更多信息请参阅LICENSE.txt

(返回顶部)

联系方式

路易斯 - [email protected]

项目链接:https://github.com/kingwingfly/rom-cache

(返回顶部)

依赖项

~0.3–25MB
~350K SLoC