介紹一個 Rust 的鍵值存儲庫:keyv
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
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/J-ud0Yv9XF1bshUZ6AE_yQ