AI掘金头条新闻系统 (Toutiao News)-设计缓存策略-缓存新闻分类

1. 获取/写入新闻分类缓存cache/news_cache.py

# 新闻相关的缓存方法:新闻分类的读取和写入 # key - value from typing import List, Dict, Any, Optional from config.cache_conf import get_json_cache, set_cache CATEGORIES_KEY = "news:categories" # 获取新闻分类缓存 async def get_cached_categories(): return await get_json_cache(CATEGORIES_KEY) # 写入新闻分类缓存: 缓存的数据, 过期时间 # 分类、配置 7200;列表: 600; 详情: 1800;验证码:120 -- 数据越稳定,缓存越持久 # 避免所有key同时过期 引起缓存雪崩 async def set_cache_categories(data: List[Dict[str, Any]], expire: int = 7200): return await set_cache(CATEGORIES_KEY, data, expire)

2. 改造crud/news.py

# 获取新闻分类 async def get_categories(db: AsyncSession, skip: int = 0, limit: int = 100): # 先尝试从缓存中获取数据 cached_categories = await get_cached_categories() if cached_categories: return cached_categories stmt = select(Category).offset(skip).limit(limit) result = await db.execute(stmt) categories = result.scalars().all() # ORM # 写入缓存 if categories: categories = jsonable_encoder(categories) await set_cache_categories(categories) # 返回数据 return categories

3. 运行结果