fix(api): 修复缓存状态判断逻辑
- fetch_data_with_ttl 返回 (data, is_cached) 元组 - 修复 cached 字段始终为 false 的问题 - 批量接口适配新的返回格式
This commit is contained in:
@@ -137,14 +137,17 @@ def _fetch_data_cached(code: str, start: str, end: str, retry: int) -> Optional[
|
|||||||
return json.dumps({"error": str(e)})
|
return json.dumps({"error": str(e)})
|
||||||
|
|
||||||
|
|
||||||
def fetch_data_with_ttl(code: str, start: str, end: str, retry: int = 3, nocache: bool = False) -> Optional[Dict]:
|
def fetch_data_with_ttl(code: str, start: str, end: str, retry: int = 3, nocache: bool = False) -> tuple[Optional[Dict], bool]:
|
||||||
"""
|
"""
|
||||||
获取数据,支持TTL缓存
|
获取数据,支持TTL缓存
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
(data, is_cached): 数据和是否命中缓存
|
||||||
"""
|
"""
|
||||||
if nocache:
|
if nocache:
|
||||||
# 直接获取,不使用缓存
|
# 直接获取,不使用缓存
|
||||||
result_json = _fetch_data_cached.__wrapped__(code, start, end, retry)
|
result_json = _fetch_data_cached.__wrapped__(code, start, end, retry)
|
||||||
return json.loads(result_json) if result_json else None
|
return (json.loads(result_json) if result_json else None, False)
|
||||||
|
|
||||||
# 使用缓存
|
# 使用缓存
|
||||||
cache_key = (code, start, end, retry)
|
cache_key = (code, start, end, retry)
|
||||||
@@ -154,7 +157,7 @@ def fetch_data_with_ttl(code: str, start: str, end: str, retry: int = 3, nocache
|
|||||||
if cache_key in fetch_data_with_ttl._ttl_cache:
|
if cache_key in fetch_data_with_ttl._ttl_cache:
|
||||||
entry = fetch_data_with_ttl._ttl_cache[cache_key]
|
entry = fetch_data_with_ttl._ttl_cache[cache_key]
|
||||||
if not entry.is_expired():
|
if not entry.is_expired():
|
||||||
return entry.data
|
return entry.data, True
|
||||||
# 过期,删除
|
# 过期,删除
|
||||||
del fetch_data_with_ttl._ttl_cache[cache_key]
|
del fetch_data_with_ttl._ttl_cache[cache_key]
|
||||||
else:
|
else:
|
||||||
@@ -164,14 +167,14 @@ def fetch_data_with_ttl(code: str, start: str, end: str, retry: int = 3, nocache
|
|||||||
result_json = _fetch_data_cached(code, start, end, retry)
|
result_json = _fetch_data_cached(code, start, end, retry)
|
||||||
|
|
||||||
if result_json is None:
|
if result_json is None:
|
||||||
return None
|
return None, False
|
||||||
|
|
||||||
result = json.loads(result_json)
|
result = json.loads(result_json)
|
||||||
|
|
||||||
# 存入TTL缓存
|
# 存入TTL缓存
|
||||||
fetch_data_with_ttl._ttl_cache[cache_key] = TimedCacheEntry(result)
|
fetch_data_with_ttl._ttl_cache[cache_key] = TimedCacheEntry(result)
|
||||||
|
|
||||||
return result
|
return result, False
|
||||||
|
|
||||||
|
|
||||||
def clear_data_cache():
|
def clear_data_cache():
|
||||||
@@ -422,7 +425,7 @@ def get_ohlcv():
|
|||||||
retry_count = 3
|
retry_count = 3
|
||||||
|
|
||||||
# 使用缓存获取数据
|
# 使用缓存获取数据
|
||||||
result = fetch_data_with_ttl(code, start, end, retry_count, nocache)
|
result, is_cached = fetch_data_with_ttl(code, start, end, retry_count, nocache)
|
||||||
|
|
||||||
if result is None:
|
if result is None:
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@@ -443,7 +446,7 @@ def get_ohlcv():
|
|||||||
}), 500
|
}), 500
|
||||||
|
|
||||||
# 添加缓存状态
|
# 添加缓存状态
|
||||||
result['cached'] = not nocache and _fetch_data_cached.cache_info().hits > 0
|
result['cached'] = is_cached
|
||||||
|
|
||||||
return jsonify(result)
|
return jsonify(result)
|
||||||
|
|
||||||
@@ -520,7 +523,7 @@ def batch_ohlcv():
|
|||||||
for code in codes:
|
for code in codes:
|
||||||
try:
|
try:
|
||||||
# 使用缓存获取数据
|
# 使用缓存获取数据
|
||||||
result = fetch_data_with_ttl(code, start, end, retry, nocache=False)
|
result, _ = fetch_data_with_ttl(code, start, end, retry, nocache=False)
|
||||||
|
|
||||||
if result is not None and "error" not in result:
|
if result is not None and "error" not in result:
|
||||||
results[code] = result
|
results[code] = result
|
||||||
|
|||||||
Reference in New Issue
Block a user