use crate::rubase::rudto::RedisDto;
use crate::rucfg;
use crate::rulog::rulog;
use redis::{Client, Commands, RedisResult};
pub trait TraitRedis {
fn new() -> Self;
fn conn(&self) -> redis::RedisResult<()>;
fn set_key(&self, key: &str, value: &str) -> redis::RedisResult<()>;
fn get_key(&self, key: &str) -> redis::RedisResult<String>;
fn del_key(&self, key: &str) -> redis::RedisResult<String>;
}
pub struct RedisClient {
redisDto: RedisDto,
client: Option<redis::Client>,
}
impl RedisClient {
pub fn reopen(&self) -> RedisResult<Client> {
let client = redis::Client::open(self.redisDto.build_url())
.expect("Failed to connect to Redis");
Ok(client)
}
}
impl TraitRedis for RedisClient {
fn new() -> Self {
let config = rucfg::find_bean_ru_config().unwrap().read();
let client = redis::Client::open(config.redis.build_url())
.expect("Failed to connect to Redis");
Self {
redisDto: config.redis,
client: Some(client),
}
}
fn conn(&self) -> redis::RedisResult<()> {
let mut con = self.client.as_ref().unwrap().get_connection()?;
Ok(())
}
fn set_key(&self, key: &str, value: &str) -> redis::RedisResult<()> {
let mut con = self.client.as_ref().unwrap().get_connection()?;
let _: () = con.set(key, value)?;
Ok(())
}
fn get_key(&self, key: &str) -> redis::RedisResult<String> {
let mut con = self.client.as_ref().unwrap().get_connection()?;
let result: String = con.get(key)?;
println!("从 Redis 读取的值: {}", result);
rulog::info(result.to_string().as_str());
Ok(result)
}
fn del_key(&self, key: &str) -> redis::RedisResult<String> {
let mut con = self.client.as_ref().unwrap().get_connection()?;
let result: String = con.del(key)?;
Ok(result)
}
}