From 6fec16d78a2433db166dde7c982f937998a7b0fd Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:39:34 +0800 Subject: [PATCH] fix(cache): include method name and default parameters in cache key --- app/chain/recommend.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/chain/recommend.py b/app/chain/recommend.py index dae271d7..f946e218 100644 --- a/app/chain/recommend.py +++ b/app/chain/recommend.py @@ -1,3 +1,4 @@ +import inspect from functools import wraps from typing import Any, Callable @@ -29,8 +30,18 @@ def cached_with_empty_check(func: Callable): @wraps(func) def wrapper(*args, **kwargs): + signature = inspect.signature(func) + resolved_kwargs = {} + # 获取默认值并结合传递的参数(如果有) + for param, value in signature.parameters.items(): + if param in kwargs: + # 使用显式传递的参数 + resolved_kwargs[param] = kwargs[param] + elif value.default is not inspect.Parameter.empty: + # 没有传递参数时使用默认值 + resolved_kwargs[param] = value.default # 使用 cachetools 缓存,构造缓存键 - cache_key = hashkey(*args, **kwargs) + cache_key = f"{func.__name__}_{hashkey(*args, **resolved_kwargs)}" if cache_key in recommend_cache: return recommend_cache[cache_key] result = func(*args, **kwargs) @@ -58,6 +69,9 @@ class RecommendChain(ChainBase, metaclass=Singleton): """ 刷新推荐 """ + logger.debug("Starting to refresh Recommend data.") + recommend_cache.clear() + logger.debug("Recommend Cache has been cleared.") self.tmdb_movies() self.tmdb_tvs() self.tmdb_trending() @@ -71,6 +85,7 @@ class RecommendChain(ChainBase, metaclass=Singleton): self.douban_tv_animation() self.douban_movie_hot() self.douban_tv_hot() + logger.debug("Recommend data refresh completed.") @log_execution_time(logger=logger) @cached_with_empty_check