parent
b54a0cee58
commit
b0d0ef298b
@ -0,0 +1,92 @@
|
|||||||
|
"""
|
||||||
|
Redis客户端模块
|
||||||
|
"""
|
||||||
|
import redis
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
from typing import Optional, List, Any
|
||||||
|
from app.config import settings
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class RedisClient:
|
||||||
|
"""Redis客户端"""
|
||||||
|
|
||||||
|
_instance: Optional['RedisClient'] = None
|
||||||
|
_client: Optional[redis.Redis] = None
|
||||||
|
|
||||||
|
def __new__(cls):
|
||||||
|
if cls._instance is None:
|
||||||
|
cls._instance = super().__new__(cls)
|
||||||
|
return cls._instance
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
if self._client is None:
|
||||||
|
try:
|
||||||
|
self._client = redis.from_url(
|
||||||
|
settings.REDIS_URL,
|
||||||
|
decode_responses=True
|
||||||
|
)
|
||||||
|
logger.info("Redis连接成功")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Redis连接失败: {str(e)}")
|
||||||
|
self._client = None
|
||||||
|
|
||||||
|
def is_connected(self) -> bool:
|
||||||
|
"""检查Redis是否连接"""
|
||||||
|
if self._client is None:
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
self._client.ping()
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get(self, key: str) -> Optional[Any]:
|
||||||
|
"""获取缓存"""
|
||||||
|
if not self.is_connected():
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
value = self._client.get(key)
|
||||||
|
if value:
|
||||||
|
return json.loads(value)
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Redis获取失败: {str(e)}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def set(self, key: str, value: Any, expire: int = None) -> bool:
|
||||||
|
"""设置缓存"""
|
||||||
|
if not self.is_connected():
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
self._client.set(key, json.dumps(value), ex=expire)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Redis设置失败: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def delete(self, key: str) -> bool:
|
||||||
|
"""删除缓存"""
|
||||||
|
if not self.is_connected():
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
self._client.delete(key)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Redis删除失败: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def exists(self, key: str) -> bool:
|
||||||
|
"""检查键是否存在"""
|
||||||
|
if not self.is_connected():
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
return self._client.exists(key) > 0
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Redis检查失败: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
redis_client = RedisClient()
|
||||||
Loading…
Reference in new issue