| Crates.io | rom_cache |
| lib.rs | rom_cache |
| version | 0.1.1 |
| created_at | 2024-07-26 23:36:20.449316+00 |
| updated_at | 2025-04-19 02:53:05.40588+00 |
| description | A rust crate to cache data in memory like CPU caching RAM. |
| homepage | |
| repository | https://github.com/kingwingfly/rom-cache |
| max_upload_size | |
| id | 1316883 |
| size | 37,699 |
A rust crate to cache ROM in RAM like CPU caches RAM.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
[dependencies]
rom_cache = { version = "0.1.1" }
A rust crate to cache ROM in memory like CPU caching RAM.
(Here, ROM is a misnomer, it actually means data stored in Secondary Storage, e.g. HDD, SSD, etc.)
Trait Cacheable is provided to enable user define how to load and store data in Secondary Storage.
Cache is the main entry of this crate, which consists of CacheGroups. And CacheGroup consists of CacheLines.
Cache::get::<T>() and Cache::get_mut::<T>() are provided to retrieve data from Cache and storage. LRU is used to choose the CacheLine for T.
CacheRefCacheError::Busy, LRU-chosen CacheLine is still being writting or reading so that unable to be evicted.CacheError::Locked, cannot read T while writing.CacheMut, and dereferencing CacheMut will set CacheLine dirty.CacheError::Busy, cannot evict LRU-chosen CacheLine which is still being used.CacheError::Locked, cannot write T while reading or writing.Any dirty CacheLine will be written back (Cacheable::store()) to Secondary Storage when evicted or Cache dropped.
# use rom_cache::Cache;
// e.g 2-way set associative cache (8 sets/groups), 16 cache lines in total
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 `""`
}
For more examples, please refer to the Tests, Example or Documentation
0.1.0: MSRV 1.86
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Distributed under the MIT License. See LICENSE.txt for more information.
Louis - 836250617@qq.com
Project Link: https://github.com/kingwingfly/rom-cache