5个不稳定版本
0.2.1 | 2024年4月18日 |
---|---|
0.2.0 | 2024年4月18日 |
0.1.0 | 2024年4月16日 |
0.0.2-alpha.1 | 2023年12月27日 |
0.0.1 | 2023年12月27日 |
#1245 在 数据库接口
180 每月下载量
62KB
928 代码行
支持多种后端的简单键值存储 Keyv通过存储适配器提供跨多种后端的键值存储的一致接口。它支持基于TTL的过期,使其适合用作缓存或持久化键值存储。
使用方法
安装
cargo add keyv
存储适配器
Keyv支持多种存储适配器,您可以通过指定功能标志来启用它们。
- full: 启用所有可用适配器。
- redis: Redis存储适配器。
- postgres: PostgreSQL存储适配器。
- mysql: MySQL存储适配器。
- mongodb: MongoDB存储适配器。
- sqlite: SQLite存储适配器。
cargo add keyv --features <store>
初始化
默认情况下,所有内容都存储在内存中,您也可以选择安装存储适配器。
-
内存默认
let keyv = Keyv::default();
-
Postgres
use keyv::{adapter::postgres::PostgresStoreBuilder, Keyv}; let store = PostgresStoreBuilder::new() .uri("postgresql://postgres:postgres@localhost:5432") .table_name("custom_table_name") .build() .await.unwrap(); let keyv = Keyv::try_new(store).await.unwrap();
-
Redis
use keyv::{adapter::redis::RedisStoreBuilder, Keyv}; let store = RedisStoreBuilder::new() .uri("redis://127.0.0.1:6379") .default_ttl(3600) .build() .await .unwrap(); let keyv = Keyv::try_new(store).await.unwrap();
与存储交互
use keyv::Keyv;
#[tokio::main]
async fn main() {
let keyv = Keyv::default();
keyv.set("number", 42).await.unwrap();
keyv.set("number", 10).await.unwrap();
keyv.set("array", vec!["hola", "test"]).await.unwrap();
keyv.set("string", "life long").await.unwrap();
match keyv.get("number").await.unwrap() {
Some(number) => {
let number: i32 = serde_json::from_value(number).unwrap();
assert_eq!(number, 10);
}
None => assert!(false),
}
match keyv.get("string").await.unwrap() {
Some(string) => {
let string: String = serde_json::from_value(string).unwrap();
assert_eq!(string, "life long");
}
None => assert!(false),
}
match keyv.get("array").await.unwrap() {
Some(array) => {
let array: Vec<String> = serde_json::from_value(array).unwrap();
assert_eq!(array, vec!["hola".to_string(), "test".to_string()])
}
None => assert!(false),
}
match keyv.remove_many(&["number", "string"]).await {
Ok(_) => {}
Err(_) => assert!(false),
}
}
依赖项
~3–22MB
~332K SLoC