Django缓存策略需要建议

时间:2012-11-10 15:01:57

标签: django caching

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

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

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

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

有人能给我一个正确方向的推动吗?

1 个答案:

答案 0 :(得分:1)

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

在您的模板中,您有:

{% cache 6000 some-page-identifier %}

在您的异步任务中,您将使这样的数据无效:

def fetch_data():
    # Fetch data first
    # Then invalidate the cached item
    cache.delete('some-page-identifier')