16 releases (breaking)

0.16.0 Jan 1, 2025
0.15.0 Dec 2, 2024
0.14.0 Sep 3, 2024
0.13.0 Jun 11, 2024
0.7.0 Nov 27, 2023

#5 in #tower-sessions

Download history 1999/week @ 2025-10-09 1555/week @ 2025-10-16 1936/week @ 2025-10-23 2319/week @ 2025-10-30 2678/week @ 2025-11-06 2472/week @ 2025-11-13 1812/week @ 2025-11-20 2201/week @ 2025-11-27 2359/week @ 2025-12-04 1927/week @ 2025-12-11 1935/week @ 2025-12-18 1183/week @ 2025-12-25 2044/week @ 2026-01-01 2151/week @ 2026-01-08 2675/week @ 2026-01-15 3513/week @ 2026-01-22

10,612 downloads per month
Used in 2 crates

MIT license

17KB
103 lines

tower-sessions-redis-store

Redis via `fred` session store for `tower-sessions`.

🤸 Usage

use std::net::SocketAddr;

use axum::{response::IntoResponse, routing::get, Router};
use serde::{Deserialize, Serialize};
use time::Duration;
use tower_sessions::{Expiry, Session, SessionManagerLayer};
use tower_sessions_redis_store::{fred::prelude::*, RedisStore};

const COUNTER_KEY: &str = "counter";

#[derive(Debug, 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 = Pool::new(Config::default(), None, None, None, 6)?;

    let redis_conn = pool.connect();
    pool.wait_for_connect().await?;

    let session_store = RedisStore::new(pool);
    let session_layer = SessionManagerLayer::new(session_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?;

    redis_conn.await??;

    Ok(())
}

Dependencies

~17–45MB
~718K SLoC