13个版本 (8个破坏性)

0.13.0 2024年5月6日
0.12.0 2024年3月20日
0.11.0 2024年3月5日
0.8.2 2023年12月24日
0.7.0 2023年11月27日

#566 in 异步

Download history 209/week @ 2024-04-15 208/week @ 2024-04-22 242/week @ 2024-04-29 262/week @ 2024-05-06 147/week @ 2024-05-13 109/week @ 2024-05-20 139/week @ 2024-05-27 170/week @ 2024-06-03 209/week @ 2024-06-10 237/week @ 2024-06-17 157/week @ 2024-06-24 81/week @ 2024-07-01 258/week @ 2024-07-08 259/week @ 2024-07-15 205/week @ 2024-07-22 323/week @ 2024-07-29

每月1,051次下载

MIT许可证

14KB
76

tower-sessions-moka-store

为 `tower-sessions` 提供的 Moka 会话存储。

🤸 使用

use std::net::SocketAddr;

use axum::{response::IntoResponse, routing::get, Router};
use serde::{Deserialize, Serialize};
use time::Duration;
use tower_sessions::{CachingSessionStore, Expiry, Session, SessionManagerLayer};
use tower_sessions_moka_store::MokaStore;
use tower_sessions_sqlx_store::{sqlx::SqlitePool, SqliteStore};

const COUNTER_KEY: &str = "counter";

#[derive(Serialize, Deserialize, Default)]
struct Counter(usize);

async fn handler(session: Session) -> impl IntoResponse {
    let counter: Counter = session.get(COUNTER_KEY).await.unwrap().unwrap_or_default();
    session.insert(COUNTER_KEY, counter.0 + 1).await.unwrap();
    format!("Current count: {}", counter.0)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let pool = SqlitePool::connect(":memory:").await?;

    let sqlite_store = SqliteStore::new(pool);
    sqlite_store.migrate().await?;

    let moka_store = MokaStore::new(Some(2000));
    let caching_store = CachingSessionStore::new(moka_store, sqlite_store);

    let session_layer = SessionManagerLayer::new(caching_store)
        .with_secure(false)
        .with_expiry(Expiry::OnInactivity(Duration::seconds(10)));

    let app = Router::new().route("/", get(handler)).layer(session_layer);

    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    let listener = tokio::net::TcpListener::bind(&addr).await?;
    axum::serve(listener, app.into_make_service()).await?;

    Ok(())
}

依赖项

~9–18MB
~226K SLoC