3 releases
0.1.2 | Oct 3, 2023 |
---|---|
0.1.1 | Jun 24, 2023 |
0.1.0 | Jun 24, 2023 |
#456 in Memory management
22KB
414 lines
Shared HashMap
A shared memory hashmap including LRU eviction.
This crate provides a shared hashmap limited by memory size that can be used between difference processes and thread. This is achieved by using the shared_memory crate and raw_sync-rs for IPC mutexes.
The SharedMemoryHashMap
internally handles locking and serializing of Keys and Values in an optimized memory layout. Current the LRU implementation is basic, using timestamps for access rather than an ordered key-list. Implementing a key-list for LRU purposes is possible but requires more manual memory management.
Usage
use shared_memory_hashmap::SharedMemoryHashMap;
fn main() {
let mut map = SharedMemoryHashMap::new(1024); // bytes.
map.insert(1, "Hello");
map.insert(2, "World");
map2 = map.clone(); // map2 uses the same shared memory block as `map`.
spawn(|| move {
map2.insert(3, "Goodbye");
});
}
Dependencies
~2–27MB
~371K SLoC