介绍一个Rust的键值存储库:keyv

421次阅读  |  发布于7月以前

Keyv是一个简单的键值存储库,旨在简化键值存储并增加其灵活性,支持多个后端。它为跨后端键值存储提供了一致的接口。由于支持基于ttl的过期,它足够通用,既可以充当缓存,也可以充当持久键值存储,以适应你的需求。

可以在哪里使用Keyv?

假设你正在处理一个需要缓存用户会话的高流量web服务。keyv可以快速与Redis后端合作,为你提供内存级的存取速度。或者,假设你正在构建一个需要持久存储的应用程序,keyv与PostgreSQL将是你的首选。

以下是keyv发挥作用的一些场景:

Keyv使用案例

Keyv支持多种存储适配器,可以与各种存储后端无缝集成。使用feature标志激活它们:

Keyv提供了一种简单的方法来管理键值数据,下面是如何在Rust项目中使用它。

使用以下命令创建一个Rust新项目:

cargo new keyv-example

在Cargo.toml文件中加入以下依赖项:

[dependencies]
keyv = {version = "0.2.1", features = ["full"]}
tokio = {version = "1.37.0", features = ["full"]}

内存存储(默认)

use keyv::Keyv;

#[tokio::main]
async fn main() {
    // 用默认内存存储初始化' keyv '
    let keyv = Keyv::default();

    // 设置一个值
    keyv.set("my_key", "my_value").await.unwrap();

    // 获取值
    if let Some(value) = keyv.get("my_key").await.unwrap() {
        println!("Retrieved value: {}", value);
    } else {
        println!("Value not found");
    }

    // 删除值
    keyv.remove("my_key").await.unwrap();
}

与存储适配器一起使用

调整keyv以使用不同的存储适配器,如Redis。

use keyv::{adapter::redis::RedisStoreBuilder, Keyv};

#[tokio::main]
async fn main() {
    // 使用默认TTL初始化Redis存储
    let store = RedisStoreBuilder::new()
        .uri("redis://localhost:6379")
        .default_ttl(3600) // 1 hour TTL
        .build()
        .await
        .unwrap();

    // 用Redis store创建keyv实例
    let keyv = Keyv::try_new(store).await.unwrap();

    // 设置值和检索值
    keyv.set("my_key", "my_value").await.unwrap();
    let value = keyv
        .get("my_key")
        .await
        .unwrap()
        .expect("Key not found");

    println!("Retrieved value: {}", value);
}

要进行测试,需要先运行redis docker镜像:

docker run --name keyv-redis-test -p 6379:6379 -d redis:latest

运行结果如下:

Retrieved value: my_value

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8