fix(cache-manager): 修复类型注解,使用Optional以提高代码可读性和一致性

This commit is contained in:
Windpicker-owo
2025-11-08 22:34:25 +08:00
parent b76ccfe05b
commit c4c7c4ccc8

View File

@@ -13,7 +13,7 @@ import time
from collections import OrderedDict from collections import OrderedDict
from collections.abc import Callable from collections.abc import Callable
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any, Generic, TypeVar from typing import Any, Dict, Generic, List, Optional, Set, TypeVar, Union
from src.common.logger import get_logger from src.common.logger import get_logger
from src.common.memory_utils import estimate_size_smart from src.common.memory_utils import estimate_size_smart
@@ -96,7 +96,7 @@ class LRUCache(Generic[T]):
self._lock = asyncio.Lock() self._lock = asyncio.Lock()
self._stats = CacheStats() self._stats = CacheStats()
async def get(self, key: str) -> T | None: async def get(self, key: str) -> Optional[T]:
"""获取缓存值 """获取缓存值
Args: Args:
@@ -137,8 +137,8 @@ class LRUCache(Generic[T]):
self, self,
key: str, key: str,
value: T, value: T,
size: int | None = None, size: Optional[int] = None,
ttl: float | None = None, ttl: Optional[float] = None,
) -> None: ) -> None:
"""设置缓存值 """设置缓存值
@@ -287,8 +287,8 @@ class MultiLevelCache:
async def get( async def get(
self, self,
key: str, key: str,
loader: Callable[[], Any] | None = None, loader: Optional[Callable[[], Any]] = None,
) -> Any | None: ) -> Optional[Any]:
"""从缓存获取数据 """从缓存获取数据
查询顺序L1 -> L2 -> loader 查询顺序L1 -> L2 -> loader
@@ -329,8 +329,8 @@ class MultiLevelCache:
self, self,
key: str, key: str,
value: Any, value: Any,
size: int | None = None, size: Optional[int] = None,
ttl: float | None = None, ttl: Optional[float] = None,
) -> None: ) -> None:
"""设置缓存值 """设置缓存值
@@ -390,7 +390,7 @@ class MultiLevelCache:
await self.l2_cache.clear() await self.l2_cache.clear()
logger.info("所有缓存已清空") logger.info("所有缓存已清空")
async def get_stats(self) -> dict[str, Any]: async def get_stats(self) -> Dict[str, Any]:
"""获取所有缓存层的统计信息(修复版:避免锁嵌套,使用超时)""" """获取所有缓存层的统计信息(修复版:避免锁嵌套,使用超时)"""
# 🔧 修复:并行获取统计信息,避免锁嵌套 # 🔧 修复:并行获取统计信息,避免锁嵌套
l1_stats_task = asyncio.create_task(self._get_cache_stats_safe(self.l1_cache, "L1")) l1_stats_task = asyncio.create_task(self._get_cache_stats_safe(self.l1_cache, "L1"))
@@ -492,7 +492,7 @@ class MultiLevelCache:
logger.error(f"{cache_name}统计获取异常: {e}") logger.error(f"{cache_name}统计获取异常: {e}")
return CacheStats() return CacheStats()
async def _get_cache_keys_safe(self, cache) -> set[str]: async def _get_cache_keys_safe(self, cache) -> Set[str]:
"""安全获取缓存键集合(带超时)""" """安全获取缓存键集合(带超时)"""
try: try:
# 快速获取键集合,使用超时避免死锁 # 快速获取键集合,使用超时避免死锁
@@ -507,12 +507,12 @@ class MultiLevelCache:
logger.error(f"缓存键获取异常: {e}") logger.error(f"缓存键获取异常: {e}")
return set() return set()
async def _extract_keys_with_lock(self, cache) -> set[str]: async def _extract_keys_with_lock(self, cache) -> Set[str]:
"""在锁保护下提取键集合""" """在锁保护下提取键集合"""
async with cache._lock: async with cache._lock:
return set(cache._cache.keys()) return set(cache._cache.keys())
async def _calculate_memory_usage_safe(self, cache, keys: set[str]) -> int: async def _calculate_memory_usage_safe(self, cache, keys: Set[str]) -> int:
"""安全计算内存使用(带超时)""" """安全计算内存使用(带超时)"""
if not keys: if not keys:
return 0 return 0
@@ -529,7 +529,7 @@ class MultiLevelCache:
logger.error(f"内存计算异常: {e}") logger.error(f"内存计算异常: {e}")
return 0 return 0
async def _calc_memory_with_lock(self, cache, keys: set[str]) -> int: async def _calc_memory_with_lock(self, cache, keys: Set[str]) -> int:
"""在锁保护下计算内存使用""" """在锁保护下计算内存使用"""
total_size = 0 total_size = 0
async with cache._lock: async with cache._lock:
@@ -749,7 +749,7 @@ class MultiLevelCache:
# 全局缓存实例 # 全局缓存实例
_global_cache: MultiLevelCache | None = None _global_cache: Optional[MultiLevelCache] = None
_cache_lock = asyncio.Lock() _cache_lock = asyncio.Lock()