AI掘金头条新闻系统 (Toutiao News)-缓存相关推荐新闻

1. cache/news_cache.py

python 复制代码
RELATED_NEWS_PREFIX = "news:related:"

# 写入缓存-相关新闻 key = news:related:新闻id:分类id + 相关新闻列表 + 过期时间
async def cache_related_news(news_id: int, category_id: int, related_list: List[Dict[str, Any]], expire: int = 1800) -> bool:
    key = f"{RELATED_NEWS_PREFIX}{news_id}:{category_id}"
    return await set_cache(key, related_list, expire)


# 读取缓存-相关新闻 key = news:related:新闻id:分类id
async def get_cached_related_news(news_id: int, category_id: int) -> Optional[List[Dict[str, Any]]]:
    key = f"{RELATED_NEWS_PREFIX}{news_id}:{category_id}"
    return await get_json_cache(key)

2. 改造crud/news.py

python 复制代码
# 获取相关推荐新闻
async def get_related_news(db: AsyncSession, news_id: int, category_id: int, limit: int = 5):
    # 先尝试从缓存获取相关新闻
    cached_related = await get_cached_related_news(news_id, category_id)
    if cached_related:
        return cached_related

    # 查询数据库
    stmt = (
        select(News)
        .where(
            News.id != news_id,
            News.category_id == category_id
        )
        .order_by(
            News.views.desc(),
            News.publish_time.desc()
        )
        .limit(limit)
    )

    result = await db.execute(stmt)
    related_news = result.scalars().all()

    related_list = [
        {
            "id": item.id,
            "title": item.title,
            "content": item.content,
            "image": item.image,
            "author": item.author,
            "publishTime": item.publish_time,
            "categoryId": item.category_id,
            "views": item.views
        }
        for item in related_news
    ]

    # 写入缓存
    if related_list:
        await cache_related_news(news_id, category_id, related_list)

    return related_list
相关推荐
the局外人15 分钟前
LangChain ToolRuntime 入门:context、state 与 store 的实际用法
后端·langchain·agent
hengdonghui20 分钟前
Writeup 4 GFCTF 2021 Baby_Web
web·ctf·变量覆盖·路径穿越·php 代码审计
回家路上绕了弯20 分钟前
当 AI 越来越能干,我们如何理解自己的价值?
后端
用户2986985301421 分钟前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
陈随易29 分钟前
Node.js 2026上半年都有哪些性能提升?
前端·后端·程序员
hhcgchpspk41 分钟前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬
小小张说故事44 分钟前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典
python
vipxieliang1 小时前
Python collections:高效容器与实战案例
后端·python
LK_071 小时前
【FastAPI】基础篇 01|开始之前:API、HTTP 与 FastAPI 到底是什么
网络协议·http·fastapi
驭渊的小故事1 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring