0

我正在部署我的第一个主要 Django 应用程序,并且需要一些缓存建议。

我的站点使用 Google 的分析 API 来显示站点周围的“热门内容”列表。这些 API 调用很慢(2-5 秒),所以我将它们的结果缓存了一个小时。然后我有一个 cron 作业,它每 15 分钟运行一次,并从 Google 重新请求数据。我意识到将它缓存一个小时并每 15 分钟更新一次似乎有点奇怪,我想这是一种愚蠢的故障保护。

我将网站的主要输出缓存了几个小时(它不会比这更频繁地更新)。当然,这意味着无论我多久调用一次 API,呈现“流行内容”的模板部分都不会在该时间段内更新。

我查看了 Django 的{% cache %}模板标签并尝试将我的“流行内容”模板视图包装在一个最小缓存的包装器中(1 秒缓存时间,用于测试)。这可行(如果我随后手动调用 Google API 并重新加载我的页面,模板会更改),但我不确定它是否会按我的意图工作:基本上,我不想缓存整个页面几秒钟(而不是几个小时),但我希望它在我从 Google 获取新数据时更新。

任何人都可以在这里给我一个正确的方向吗?

4

1 回答 1

1

如果我正确地回答了您的问题,那么当获取新数据时,您的异步作业必须使相关的缓存键无效。

在您的模板中,您有以下内容:

{% cache 6000 some-page-identifier %}

在您的异步任务中,您使数据无效,如下所示:

def fetch_data():
    # Fetch data first
    # Then invalidate the cached item
    cache.delete('some-page-identifier')
于 2012-11-10T15:45:07.283 回答