3 stable releases

1.0.2 Mar 26, 2024
1.0.1 May 19, 2023

#500 in Concurrency

Download history 144/week @ 2024-11-30 143/week @ 2024-12-07 541/week @ 2024-12-14 287/week @ 2024-12-21 70/week @ 2024-12-28 462/week @ 2025-01-04 266/week @ 2025-01-11 217/week @ 2025-01-18 344/week @ 2025-01-25 609/week @ 2025-02-01 498/week @ 2025-02-08 1082/week @ 2025-02-15 310/week @ 2025-02-22 484/week @ 2025-03-01 640/week @ 2025-03-08 769/week @ 2025-03-15

2,261 downloads per month
Used in 5 crates (3 directly)

MIT license

26KB
502 lines

timedmap Crates.io docs.rs

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.

Basic Example

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));

Cleanup Example

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 and actix-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();

Dependencies

~0–8MB
~62K SLoC