refactor(cache): remove unused cache management and monitoring endpoints
This commit is contained in:
@@ -1,140 +0,0 @@
|
|||||||
"""
|
|
||||||
缓存管理和监控接口
|
|
||||||
提供缓存统计、清理和预热功能
|
|
||||||
"""
|
|
||||||
|
|
||||||
from app.dependencies.database import Redis
|
|
||||||
from app.service.user_cache_service import get_user_cache_service
|
|
||||||
|
|
||||||
from .router import router
|
|
||||||
|
|
||||||
from fastapi import HTTPException
|
|
||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
|
|
||||||
class CacheStatsResponse(BaseModel):
|
|
||||||
user_cache: dict
|
|
||||||
redis_info: dict
|
|
||||||
|
|
||||||
|
|
||||||
@router.get(
|
|
||||||
"/cache/stats",
|
|
||||||
response_model=CacheStatsResponse,
|
|
||||||
name="获取缓存统计信息",
|
|
||||||
description="获取用户缓存和Redis的统计信息,需要管理员权限。",
|
|
||||||
tags=["缓存管理"],
|
|
||||||
)
|
|
||||||
async def get_cache_stats(
|
|
||||||
redis: Redis,
|
|
||||||
# current_user: User = Security(get_current_user, scopes=["admin"]), # 暂时注释,可根据需要启用
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
cache_service = get_user_cache_service(redis)
|
|
||||||
user_cache_stats = await cache_service.get_cache_stats()
|
|
||||||
|
|
||||||
# 获取 Redis 基本信息
|
|
||||||
redis_info = await redis.info()
|
|
||||||
redis_stats = {
|
|
||||||
"connected_clients": redis_info.get("connected_clients", 0),
|
|
||||||
"used_memory_human": redis_info.get("used_memory_human", "0B"),
|
|
||||||
"used_memory_peak_human": redis_info.get("used_memory_peak_human", "0B"),
|
|
||||||
"total_commands_processed": redis_info.get("total_commands_processed", 0),
|
|
||||||
"keyspace_hits": redis_info.get("keyspace_hits", 0),
|
|
||||||
"keyspace_misses": redis_info.get("keyspace_misses", 0),
|
|
||||||
"evicted_keys": redis_info.get("evicted_keys", 0),
|
|
||||||
"expired_keys": redis_info.get("expired_keys", 0),
|
|
||||||
}
|
|
||||||
|
|
||||||
# 计算缓存命中率
|
|
||||||
hits = redis_stats["keyspace_hits"]
|
|
||||||
misses = redis_stats["keyspace_misses"]
|
|
||||||
hit_rate = hits / (hits + misses) * 100 if (hits + misses) > 0 else 0
|
|
||||||
redis_stats["cache_hit_rate_percent"] = round(hit_rate, 2)
|
|
||||||
|
|
||||||
return CacheStatsResponse(user_cache=user_cache_stats, redis_info=redis_stats)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(500, f"Failed to get cache stats: {e!s}")
|
|
||||||
|
|
||||||
|
|
||||||
@router.post(
|
|
||||||
"/cache/invalidate/{user_id}",
|
|
||||||
name="清除指定用户缓存",
|
|
||||||
description="清除指定用户的所有缓存数据,需要管理员权限。",
|
|
||||||
tags=["缓存管理"],
|
|
||||||
)
|
|
||||||
async def invalidate_user_cache(
|
|
||||||
user_id: int,
|
|
||||||
redis: Redis,
|
|
||||||
# current_user: User = Security(get_current_user, scopes=["admin"]), # 暂时注释
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
cache_service = get_user_cache_service(redis)
|
|
||||||
await cache_service.invalidate_user_cache(user_id)
|
|
||||||
await cache_service.invalidate_v1_user_cache(user_id)
|
|
||||||
return {"message": f"Cache invalidated for user {user_id}"}
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(500, f"Failed to invalidate cache: {e!s}")
|
|
||||||
|
|
||||||
|
|
||||||
@router.post(
|
|
||||||
"/cache/clear",
|
|
||||||
name="清除所有用户缓存",
|
|
||||||
description="清除所有用户相关的缓存数据,需要管理员权限。谨慎使用!",
|
|
||||||
tags=["缓存管理"],
|
|
||||||
)
|
|
||||||
async def clear_all_user_cache(
|
|
||||||
redis: Redis,
|
|
||||||
# current_user: User = Security(get_current_user, scopes=["admin"]), # 暂时注释
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
# 获取所有用户相关的缓存键
|
|
||||||
user_keys = await redis.keys("user:*")
|
|
||||||
v1_user_keys = await redis.keys("v1_user:*")
|
|
||||||
all_keys = user_keys + v1_user_keys
|
|
||||||
|
|
||||||
if all_keys:
|
|
||||||
await redis.delete(*all_keys)
|
|
||||||
return {"message": f"Cleared {len(all_keys)} cache entries"}
|
|
||||||
else:
|
|
||||||
return {"message": "No cache entries found"}
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(500, f"Failed to clear cache: {e!s}")
|
|
||||||
|
|
||||||
|
|
||||||
class CacheWarmupRequest(BaseModel):
|
|
||||||
user_ids: list[int] | None = None
|
|
||||||
limit: int = 100
|
|
||||||
|
|
||||||
|
|
||||||
@router.post(
|
|
||||||
"/cache/warmup",
|
|
||||||
name="缓存预热",
|
|
||||||
description="对指定用户或活跃用户进行缓存预热,需要管理员权限。",
|
|
||||||
tags=["缓存管理"],
|
|
||||||
)
|
|
||||||
async def warmup_cache(
|
|
||||||
request: CacheWarmupRequest,
|
|
||||||
redis: Redis,
|
|
||||||
# current_user: User = Security(get_current_user, scopes=["admin"]), # 暂时注释
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
cache_service = get_user_cache_service(redis)
|
|
||||||
|
|
||||||
if request.user_ids:
|
|
||||||
# 预热指定用户
|
|
||||||
from app.dependencies.database import with_db
|
|
||||||
|
|
||||||
async with with_db() as session:
|
|
||||||
await cache_service.preload_user_cache(session, request.user_ids)
|
|
||||||
return {"message": f"Warmed up cache for {len(request.user_ids)} users"}
|
|
||||||
else:
|
|
||||||
# 预热活跃用户
|
|
||||||
from app.tasks.cache import schedule_user_cache_preload_task
|
|
||||||
|
|
||||||
await schedule_user_cache_preload_task()
|
|
||||||
return {"message": f"Warmed up cache for top {request.limit} active users"}
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(500, f"Failed to warmup cache: {e!s}")
|
|
||||||
Reference in New Issue
Block a user