Crates.io | timedmap |
lib.rs | timedmap |
version | 1.0.2 |
source | src |
created_at | 2023-05-19 13:14:20.575576 |
updated_at | 2024-03-26 14:14:49.554324 |
description | A hash map with expiring key-value pairs. |
homepage | |
repository | https://github.com/zekrotja/timedmap-rs |
max_upload_size | |
id | 868846 |
size | 27,486 |
A more or less port of my package timedmap - originally written in Go - but for Rust!
timedmap
provides a thread-safe hash map with expiring key-value pairs and
automatic cleanup mechnaisms for popular async runtimes.
use timedmap::TimedMap;
use std::time::Duration;
let tm = TimedMap::new();
tm.insert("foo", 1, Duration::from_millis(100));
tm.insert("bar", 2, Duration::from_millis(200));
tm.insert("baz", 3, Duration::from_millis(300));
assert_eq!(tm.get(&"foo"), Some(1));
assert_eq!(tm.get(&"bar"), Some(2));
assert_eq!(tm.get(&"baz"), Some(3));
std::thread::sleep(Duration::from_millis(120));
assert_eq!(tm.get(&"foo"), None);
assert_eq!(tm.get(&"bar"), Some(2));
assert_eq!(tm.get(&"baz"), Some(3));
std::thread::sleep(Duration::from_millis(100));
assert_eq!(tm.get(&"foo"), None);
assert_eq!(tm.get(&"bar"), None);
assert_eq!(tm.get(&"baz"), Some(3));
You can use the start_cleaner
function to automatically clean up
expired key-value pairs in given time intervals using popular
async runtimes.
Currently, only implementations for
tokio
andactix-rt
are available. Implentations for other popular runtimes are planned in the future. If you want to contribute an implementation, feel free to create a pull request. 😄
use timedmap::{TimedMap, start_cleaner};
use std::time::Duration;
use std::sync::Arc;
let tm = Arc::new(TimedMap::new());
tm.insert("foo", 1, Duration::from_secs(60));
let cancel = start_cleaner(tm, Duration::from_secs(10));
cancel();