use crate::rubase::rudto::RedisDto;
use crate::rubase::{BaseEntitySingle};
use crate::rucfg;
use crate::rulog::rulog;
use redis::{Client, Commands, RedisResult};
use serde::{Deserialize, Serialize, Serializer};
use crate::rubase::getself::GetSelf;
pub trait TraitRedis {
fn conn(&self) -> redis::RedisResult<Client>;
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>;
}
#[derive(Debug,Serialize,Deserialize,Clone)]
pub struct RedisClient {
redisDto: RedisDto,
#[serde(skip)]
client: Option<redis::Client>,
}
impl BaseEntitySingle for RedisClient {}
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 GetSelf for RedisClient {}
impl RedisClient {
pub fn new() -> Self {
let config = rucfg::find_bean_ruconfig().unwrap().read();
rulog::info2("redis:",config.redis.build_url().as_str());
let client =
redis::Client::open(config.redis.build_url()).expect("Failed to connect to Redis");
Self {
redisDto: config.redis,
client: Some(client),
}
}
}
impl TraitRedis for RedisClient {
fn conn(&self) -> redis::RedisResult<Client> {
let client =
redis::Client::open(self.redisDto.build_url()).expect("Failed to connect to Redis");
Ok(client)
}
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)
}
}