use std::sync::Arc;
use redis::Commands;
use crate::{RedissonResult, SyncRedisConnectionManager};
pub struct RKeys {
connection_manager: Arc<SyncRedisConnectionManager>,
}
impl RKeys {
pub fn new(connection_manager: Arc<SyncRedisConnectionManager>) -> Self {
Self { connection_manager }
}
pub fn delete(&self, pattern: &str) -> RedissonResult<u64> {
let mut conn = self.connection_manager.get_connection()?;
let keys: Vec<String> = conn.keys(pattern)?;
if keys.is_empty() {
return Ok(0);
}
let deleted: i32 = conn.del(keys)?;
Ok(deleted as u64)
}
pub fn find_keys_by_pattern(&self, pattern: &str) -> RedissonResult<Vec<String>> {
let mut conn = self.connection_manager.get_connection()?;
let keys: Vec<String> = conn.keys(pattern)?;
Ok(keys)
}
pub fn flush_all(&self) -> RedissonResult<()> {
let mut conn = self.connection_manager.get_connection()?;
redis::cmd("FLUSHALL").query::<()>(&mut conn)?;
Ok(())
}
pub fn flush_db(&self) -> RedissonResult<()> {
let mut conn = self.connection_manager.get_connection()?;
redis::cmd("FLUSHDB").query::<()>(&mut conn)?;
Ok(())
}
}