• 在Rust中使用Keyv实现简单的键值存储功能
  • 发布于 2个月前
  • 99 热度
    0 评论
  • CEBBCt
  • 4 粉丝 49 篇博客
  •   
Keyv是一个简单的键值存储库,旨在简化键值存储并增加其灵活性,支持多个后端。它为跨后端键值存储提供了一致的接口。由于支持基于ttl的过期,它足够通用,既可以充当缓存,也可以充当持久键值存储,以适应你的需求。

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

以下是keyv发挥作用的一些场景:
1.使用内存数据库(如Redis)缓存频繁访问的数据。
2.在SQLite或PostgreSQL等SQL数据库中持久化用户设置或会话数据。
3.构建一个快速的原型,需要一个简单的存储解决方案,而不需要复杂配置的开销。

Keyv使用案例
Keyv支持多种存储适配器,可以与各种存储后端无缝集成。使用feature标志激活它们:
full:启用所有可用适配器的All-in-one功能。
Redis:用于快速缓存的内存存储。
Postgres:健壮的结构化数据存储。
MySQL:MySQL生态系统内的可靠存储。
MongoDB:采用NoSQL方法的模式灵活性。

SQLite:简单的设置,非常适合开发。


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");
    }
     // 堆代码 duidaima.com
    // 删除值
    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

用户评论