6 个版本

0.3.0 2023 年 1 月 11 日
0.2.0 2021 年 3 月 26 日
0.1.1 2020 年 11 月 4 日

HTTP 服务器 中排名第 329

每月下载量 34
4 crates 中使用

MIT/Apache

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())
}

实现

actix-storage-hashmap docs.rs docs

actix-storage-dashmap docs.rs docs

actix-storage-sled docs.rs docs

actix-storage-redis docs.rs docs

为什么?

以下情况下可能会很有用:

  1. 您不知道以后需要哪种键值数据库。
  2. 在开发过程中,您无法承担某些数据库长时间编译的费用。
    • hashmap 存储编译得非常快
  3. 您正在编写 actix-web 扩展库,并需要支持多个存储后端。

为什么不呢?

如果您真的非常关心应用程序的每一滴性能,那么 actix-storage 可能不适合您,因为它在内部使用动态调度。

示例

examples 文件夹中有一些示例,虽然非常基础,但可以给您一些启发。

许可证

此项目受以下任一许可证的许可:

任您选择。

依赖项

约 15–30MB
约 493K SLoC