3个版本
0.1.4 | 2024年7月29日 |
---|---|
0.1.3 | 2022年7月4日 |
0.1.2 | 2022年6月16日 |
0.1.1 |
|
0.1.0 |
|
336 在 数据库接口
每月 1,516 次下载
17KB
390 行
sqlite-cache
基于SQLite的Rust磁盘缓存。
用法
let cache = Cache::new(
CacheConfig::default(),
rusqlite::Connection::open_in_memory().unwrap(),
).unwrap();
let topic = cache.topic("test-topic").unwrap();
assert!(topic.get("hello").unwrap().is_none());
topic.set("hello", b"world", Duration::from_secs(60))
assert!(&topic.get("hello").unwrap().unwrap().data[..] == b"world");
锁定更新
此库支持锁定更新,以防止缓存未命中时的惊群问题。`get_for_update` API获取每个键的锁并返回一个`KeyUpdater`;同一键的后续`get_for_update`调用将阻塞,直到先前的`KeyUpdater`被丢弃。
let (updater, current_value) = topic.get_for_update("hello").await.unwrap();
let new_value = expensive_computation(current_value).await;
updater.write(new_value, Duration::from_secs(60)).unwrap();
基准测试
这些结果是在苹果M1处理器上运行`benches/cache_benchmark.rs`得到的。
mt(4)
:在4个线程上运行相同任务时的每线程操作延迟。
lookup - cache size 10000
time: [1.5978 us 1.6051 us 1.6130 us]
lookup mt(4) - cache size 10000
time: [9.7801 us 9.8464 us 9.9329 us]
insert - cache size 10000
time: [4.6316 us 4.6785 us 4.7169 us]
insert mt(4) - cache size 10000
time: [21.195 us 21.420 us 21.614 us]
依赖项
~23MB
~441K SLoC