use redis::{Commands, RedisResult}; use crate::user_data::UserData; pub struct AvatarCache { redis: redis::Client, timeout: i64, } impl AvatarCache { pub(crate) fn new(redis: redis::Client, timeout: i64) -> Self { AvatarCache { redis, timeout, } } /// Get user data from Cache pub(crate) fn get_cache_by_name(&self, name: &str) -> RedisResult { let mut con = self.redis.get_connection()?; con.hgetall(UserData::redis_id_from_str(name)) } /// Set the data as needed pub(crate) fn set_cache_data(&self, user_data: &UserData) -> RedisResult<()> { let mut con = self.redis.get_connection()?; redis::cmd("HSET") .arg(user_data.id_to_redis()) .arg(user_data) .query(&mut con)?; con.set(user_data.name_to_redis(), user_data.id())?; self.update_cache_expiry(user_data) } fn update_cache_expiry(&self, user_data: &UserData) -> RedisResult<()> { let mut con = self.redis.get_connection()?; con.expire(user_data.id_to_redis(), self.timeout)?; con.expire(user_data.name_to_redis(), self.timeout)?; Ok(()) } }