use redis::{AsyncCommands, FromRedisValue, ToRedisArgs, ToSingleRedisArg}; use crate::error::{CacheError, CacheResult}; use crate::kv::Cache; impl Cache { pub async fn sadd( &self, key: &str, member: V, ) -> CacheResult { let mut conn = self.conn().clone(); conn.sadd(key, member).await.map_err(CacheError::from) } pub async fn srem( &self, key: &str, members: V, ) -> CacheResult { let mut conn = self.conn().clone(); conn.srem(key, members).await.map_err(CacheError::from) } pub async fn sismember( &self, key: &str, member: M, ) -> CacheResult { let mut conn = self.conn().clone(); conn.sismember(key, member).await.map_err(CacheError::from) } pub async fn smembers(&self, key: &str) -> CacheResult> { let mut conn = self.conn().clone(); conn.smembers(key).await.map_err(CacheError::from) } pub async fn scard(&self, key: &str) -> CacheResult { let mut conn = self.conn().clone(); conn.scard(key).await.map_err(CacheError::from) } pub async fn sinter( &self, keys: K, ) -> CacheResult> { let mut conn = self.conn().clone(); conn.sinter(keys).await.map_err(CacheError::from) } pub async fn sunion( &self, keys: K, ) -> CacheResult> { let mut conn = self.conn().clone(); conn.sunion(keys).await.map_err(CacheError::from) } pub async fn sdiff( &self, keys: K, ) -> CacheResult> { let mut conn = self.conn().clone(); conn.sdiff(keys).await.map_err(CacheError::from) } pub async fn spop(&self, key: &str) -> CacheResult> { let mut conn = self.conn().clone(); conn.spop(key).await.map_err(CacheError::from) } }