在django中缓存已处理的数据

时间:2012-01-21 20:15:40

标签: django caching django-models

我有很多能量测量记录存储在模型中。

我的用户需要经常访问所用能源的报告,因此一个model.manager负责查询大量记录,应用一个需要~2秒的算法,这是很多时间,我测试了memcached但是没有幸运的是因为一段时间后缓存的数据不可用,但用户经常回来看同样的报告。因此,我对此性能问题的潜在解决方案是将处理过的数据(不仅是查询集,而是算法应用程序之后的数据查询集)存储在名为“ProcessedData”的模型中。

因此,当用户提示访问能源报告时,收费的经理将首先查询ProccessData,如果ProccessData.objects.filter(field1='field1').exist():返回的数据将直接传递给模板进行可视化。如果以前没有要求所需的数据,则收费的经理将必须应用算法并将请求发回给用户。

这是一个好方法吗?

1 个答案:

答案 0 :(得分:1)

在开始这样的事情之前,我肯定会尝试像django-cache-machinejohnny-cache这样的项目,他们会做模型缓存,并且他们做得很好。

我认为johnny缓存它可以更好地满足您的需求,因为它永远不会过期查询集缓存。

我不确定“缓存数据不可用”是什么意思,但您可以通过多种方式轻松解决这些问题(例如,使用像redis这样的持久缓存后端)。

如果您需要的不仅仅是查询集缓存,那么在数据库缓存即将实现之前,我会尝试另一件事。

Django cache utils带有一个很好的缓存装饰器(@cached)(参见文档和示例here),它根据参数进行缓存