1 个不稳定版本
0.1.0 | 2023年3月12日 |
---|
#2 in #持久性
18KB
408 行
hurrahdb
Hurrahdb 是一个内存中的键值存储,具有持久化选项。目前仅支持 AOF 选项进行持久化。
使用 AOF 持久化数据是异步的,并且根据 sync_time
将数据刷新到数据库中。其中 sync_time
的单位是毫秒。
使用方法
在缓存/存储数据时,键需要是 string
类型,值需要是来自 serde
库的派生自 Serialize
和 Deserialize
的结构体或枚举。以下是一个示例模型:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct DummyStruct {
value: String,
}
仅内存
当创建存储时没有配置,则不会初始化任何持久化逻辑。
// define a storage object with None
let storage = match Storage::new(None) {
Ok(storage) => storage,
Err(err) => {
// Handle the error
}
};
// Cache the `DummyStruct` struct with key "some-key"
match storage.set(
"some-key".to_string(),
&DummyStruct {
value: "some-value".to_string(),
},
) {
Ok(()) => {}
Err(err) => {
// Handle the error
}
}
// Fetch the `DummyStruct` data using key "some-key"
let result_option: Option<DummyStruct> = match storage.get("some-key".to_string()) {
Ok(result) => result,
Err(err) => {
// Handle the error
}
};
内存加 AOF
当创建带有 AOF 配置的存储时,它将读取输入文件并预先使用文件中的数据创建哈希表。除此之外,还会创建一个后台作业,根据 sync_time
值将数据刷新到磁盘。
注意:
- 由于数据刷新是异步的,因此不能保证持久化。在应用程序的关闭/崩溃状态下,您可能会丢失数据。
- 需要
tokio 运行时
示例用法 这里
// Define a storage with AOF config. Flushes data into file every 100ms.
let storage = match Storage::new(Some(Config {
aof_config: Some(AofConfig {
sync_time: 100,
file_name: "memory-cache-test-1".to_string(),
}),
persistance_type: persistance::Type::AOF,
})) {
Ok(storage) => storage,
Err(err) => {
// Handle the error
}
};
// Cache the `DummyStruct` struct with key "some-key"
match storage.set(
"some-key".to_string(),
&DummyStruct {
value: "some-value".to_string(),
},
) {
Ok(()) => {}
Err(err) => {
// Handle the error
}
}
// Fetch the `DummyStruct` data using key "some-key"
let result_option: Option<DummyStruct> = match storage.get("some-key".to_string()) {
Ok(result) => result,
Err(err) => {
// Handle the error
}
};
依赖关系
~3–10MB
~93K SLoC