6 个版本
0.3.0 | 2023 年 1 月 11 日 |
---|---|
0.2.0 | 2021 年 3 月 26 日 |
0.1.1 | 2020 年 11 月 4 日 |
在 HTTP 服务器 中排名第 329
每月下载量 34 次
在 4 crates 中使用
81KB
1.5K SLoC
Actix-storage
Actix-storage 是一些键值存储的简单包装,提供基本操作,无需事先了解后端。
安装
Actix-storage 旨在与实现 crates 之一一起使用,例如
# Cargo.toml
[dependencies]
actix-storage = "0.3.0"
actix-storage-hashmap = "0.3.0"
或者您想使用基于 serde 的方法来处理类型化信息
[dependencies]
actix-storage = {version = "0.3.0", features=["serde-json"]}
用法
选择实现者之后
use actix_storage::{Storage, Format};
use actix_storage_hashmap::HashMapActor;
use actix_web::{App, HttpServer};
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// Intialize the implementer according to its docs
let store = HashMapActor::start_default();
// Give it to the Storage struct
let storage = Storage::build().expiry_store(store).finish();
// Or if it doesn't support expiring functionality
// it will give errors if those methods are called
let storage = Storage::build().store(store).finish();
// It is also possible to feed a seprate expiry,
// as long as it works on the same storage backend
let storage = Storage::build().expiry(expiry).finish();
// It is also possible to add a format to directly
// set and get values using serde.
let storage = Storage::build().store(expiry).format(Format::Json).finish();
// Store it in you application state with actix_web::App.app_data
let server = HttpServer::new(move || {
App::new()
.app_data(storage.clone())
});
server.bind("localhost:5000")?.run().await
}
然后在您的处理器中
async fn index(storage: Storage) -> Result<String, Error>{
storage.set_bytes("key", "value").await;
let val = storage.get_bytes("key").await?.unwrap_or_default();
// Or if you defined a serde format
let number: i32 = 5
storage.set("number", number);
let x: i32 = storage.get("number");
Ok(std::str::from_utf8(&val)
.map_err(|err| error::ErrorInternalServerError("Storage error"))?.to_string())
}
实现
为什么?
以下情况下可能会很有用:
- 您不知道以后需要哪种键值数据库。
- 在开发过程中,您无法承担某些数据库长时间编译的费用。
- hashmap 存储编译得非常快
- 您正在编写 actix-web 扩展库,并需要支持多个存储后端。
为什么不呢?
如果您真的非常关心应用程序的每一滴性能,那么 actix-storage 可能不适合您,因为它在内部使用动态调度。
示例
在 examples
文件夹中有一些示例,虽然非常基础,但可以给您一些启发。
许可证
此项目受以下任一许可证的许可:
- Apache 许可证 2.0 版(LICENSE-APACHE)
- MIT 许可证(LICENSE-MIT)
任您选择。
依赖项
约 15–30MB
约 493K SLoC