Keyv是一个简单的键值存储库,旨在简化键值存储并增加其灵活性,支持多个后端。它为跨后端键值存储提供了一致的接口。由于支持基于ttl的过期,它足够通用,既可以充当缓存,也可以充当持久键值存储,以适应你的需求。
可以在哪里使用Keyv?
假设你正在处理一个需要缓存用户会话的高流量web服务。keyv可以快速与Redis后端合作,为你提供内存级的存取速度。或者,假设你正在构建一个需要持久存储的应用程序,keyv与PostgreSQL将是你的首选。
以下是keyv发挥作用的一些场景:
- 使用内存数据库(如Redis)缓存频繁访问的数据。
- 在SQLite或PostgreSQL等SQL数据库中持久化用户设置或会话数据。
- 构建一个快速的原型,需要一个简单的存储解决方案,而不需要复杂配置的开销。
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");
}
// 删除值
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