21 个版本
0.4.18 | 2024 年 5 月 15 日 |
---|---|
0.4.15 | 2024 年 2 月 13 日 |
0.4.13 | 2023 年 11 月 23 日 |
0.4.6 | 2023 年 6 月 6 日 |
0.3.1 | 2022 年 7 月 10 日 |
#25 在 缓存
31,888 每月下载量
在 19 个 Crates 中使用 (4 直接)
60KB
2K SLoC
once_map
这个 crate 提供 OnceMap
,一种可以写入共享引用的 HashMap
类型,但只能写入一次。这与 once_cell
类似,但具有映射功能。这允许在映射的生命周期内引用映射内的值,而不需要进一步加锁。
这使得这种类型非常适合实现缓存。为此提供了 LazyMap
类型。
这个 crate 提供了这种高度优化以用于并发的映射,同时也提供了单线程版本。
示例
let map = OnceMap::new();
// All these are `&str` pointing directly in the map.
// Note that we don't need a mutable reference, so we can have several of
// them at the same time.
let roses = map.insert(String::from("rose"), |_| String::from("red"));
let violets = map.insert(String::from("violets"), |_| String::from("blue"));
let sugar = map.insert(String::from("sugar"), |_| String::from("sweet"));
assert_eq!(roses, "red");
assert_eq!(violets, "blue");
assert_eq!(sugar, "sweet");
// The closure is never run here, because we already have a value for "rose"
let roses = map.insert(String::from("rose"), |_| String::from("green"));
// The old value did not change
assert_eq!(roses, "red");
依赖项
~1.1–6.5MB
~31K SLoC