1. cache/news_cache.py
python
NEWS_DETAIL_PREFIX = "news:detail:"
# 读取缓存-新闻详情 key = news:detail:新闻id
async def get_cached_news_detail(news_id: int) -> Optional[Dict[str, Any]]:
key = f"{NEWS_DETAIL_PREFIX}{news_id}"
return await get_json_cache(key)
# 写入缓存-新闻详情 key = news:detail:新闻id + 新闻数据 + 过期时间
async def cache_news_detail(news_id: int, news_data: Dict[str, Any], expire: int = 300) -> bool:
key = f"{NEWS_DETAIL_PREFIX}{news_id}"
return await set_cache(key, news_data, expire)
2. 改造crud/news.py
python
# 获取新闻详情
async def get_news_detail(
db: AsyncSession,
new_id : int
):
# 先尝试从缓存获取新闻详情
cached_detail = await get_cached_news_detail(new_id)
if cached_detail:
return News(**cached_detail)
# 查询数据库
stmt = select(News).where(News.id == new_id)
result = await db.execute(stmt)
news = result.scalar_one_or_none()
# 写入缓存
if news:
news_data = jsonable_encoder(news)
await cache_news_detail(new_id, news_data)
return news