use anyhow::Error; use redis::Client; use std::env; #[derive(Clone)] pub struct Cache { pub client: Client, } impl Cache { pub fn new() -> Result { let client = redis::Client::open(env::var("REDIS_URL").unwrap_or("redis://127.0.0.1".into()))?; Ok(Cache { client }) } pub fn get(&self, key: &str) -> Result, Error> { let mut con = self.client.get_connection()?; let result: Option = redis::cmd("GET").arg(key).query(&mut con)?; Ok(result) } pub fn set(&self, key: &str, value: &str) -> Result<(), Error> { let mut con = self.client.get_connection()?; redis::cmd("SET") .arg(key) .arg(value) .query::<()>(&mut con)?; Ok(()) } pub fn setex(&self, key: &str, value: &str, seconds: usize) -> Result<(), Error> { let mut con = self.client.get_connection()?; redis::cmd("SETEX") .arg(key) .arg(seconds) .arg(value) .query::<()>(&mut con)?; Ok(()) } pub fn del(&self, key: &str) -> Result<(), Error> { let mut con = self.client.get_connection()?; redis::cmd("DEL").arg(key).query::<()>(&mut con)?; Ok(()) } }