reuse redis connection

This commit is contained in:
Shautvast 2026-04-03 17:23:24 +02:00
parent 9fa252a6af
commit 879ab82cae

View file

@ -1,20 +1,29 @@
use redis::AsyncCommands;
use sha2::{Digest, Sha256};
use tokio::sync::OnceCell;
/// Redis caching layer implementing the key patterns and TTLs
/// defined in DATA_MODEL.md section 3.
pub struct CacheService {
client: redis::Client,
conn: OnceCell<redis::aio::MultiplexedConnection>,
}
impl CacheService {
pub fn new(redis_url: &str) -> Result<Self, redis::RedisError> {
let client = redis::Client::open(redis_url)?;
Ok(Self { client })
Ok(Self {
client,
conn: OnceCell::new(),
})
}
async fn conn(&self) -> Result<redis::aio::MultiplexedConnection, redis::RedisError> {
self.client.get_multiplexed_async_connection().await
let conn = self
.conn
.get_or_try_init(|| self.client.get_multiplexed_async_connection())
.await?;
Ok(conn.clone())
}
// ── Tile cache ──────────────────────────────────────────────