fix cache

This commit is contained in:
jxxghp
2025-07-31 09:55:47 +08:00
parent dee1212a76
commit ee4d6d0db3

View File

@@ -529,33 +529,65 @@ def cached(region: Optional[str] = None, maxsize: Optional[int] = 512, ttl: Opti
# 获取缓存区 # 获取缓存区
cache_region = region if region is not None else f"{func.__module__}.{func.__name__}" cache_region = region if region is not None else f"{func.__module__}.{func.__name__}"
@wraps(func) # 检查是否为异步函数
def wrapper(*args, **kwargs): is_async = inspect.iscoroutinefunction(func)
# 获取缓存键
cache_key = cache_backend.get_cache_key(func, args, kwargs) if is_async:
# 尝试获取缓存 @wraps(func)
cached_value = cache_backend.get(cache_key, region=cache_region) async def async_wrapper(*args, **kwargs):
if should_cache(cached_value) and is_valid_cache_value(cache_key, cached_value, cache_region): # 获取缓存键
return cached_value cache_key = cache_backend.get_cache_key(func, args, kwargs)
# 执行函数并缓存结果 # 尝试获取缓存
result = func(*args, **kwargs) cached_value = cache_backend.get(cache_key, region=cache_region)
# 判断是否需要缓存 if should_cache(cached_value) and is_valid_cache_value(cache_key, cached_value, cache_region):
if not should_cache(result): return cached_value
# 执行异步函数并缓存结果
result = await func(*args, **kwargs)
# 判断是否需要缓存
if not should_cache(result):
return result
# 设置缓存(如果有传入的 maxsize 和 ttl则覆盖默认值
cache_backend.set(cache_key, result, ttl=ttl, maxsize=maxsize, region=cache_region)
return result return result
# 设置缓存(如果有传入的 maxsize 和 ttl则覆盖默认值
cache_backend.set(cache_key, result, ttl=ttl, maxsize=maxsize, region=cache_region)
return result
def cache_clear(): def cache_clear():
""" """
清理缓存区 清理缓存区
""" """
# 清理缓存区 # 清理缓存区
cache_backend.clear(region=cache_region) cache_backend.clear(region=cache_region)
wrapper.cache_region = cache_region async_wrapper.cache_region = cache_region
wrapper.cache_clear = cache_clear async_wrapper.cache_clear = cache_clear
return wrapper return async_wrapper
else:
@wraps(func)
def wrapper(*args, **kwargs):
# 获取缓存键
cache_key = cache_backend.get_cache_key(func, args, kwargs)
# 尝试获取缓存
cached_value = cache_backend.get(cache_key, region=cache_region)
if should_cache(cached_value) and is_valid_cache_value(cache_key, cached_value, cache_region):
return cached_value
# 执行函数并缓存结果
result = func(*args, **kwargs)
# 判断是否需要缓存
if not should_cache(result):
return result
# 设置缓存(如果有传入的 maxsize 和 ttl则覆盖默认值
cache_backend.set(cache_key, result, ttl=ttl, maxsize=maxsize, region=cache_region)
return result
def cache_clear():
"""
清理缓存区
"""
# 清理缓存区
cache_backend.clear(region=cache_region)
wrapper.cache_region = cache_region
wrapper.cache_clear = cache_clear
return wrapper
return decorator return decorator