在django中缓存已处理的数据

在django中缓存已处理的数据,django,caching,django-models,Django,Caching,Django Models,我有很多能量测量记录存储在模型中 我的用户需要经常访问能量消耗报告,因此model.manager负责查询大量记录,应用一种需要2秒左右时间的算法,这是很长的时间。我测试了memcached,但运气不佳,因为一段时间后缓存的数据不可用,但用户经常返回查看相同的报告。因此,我对这个性能问题的潜在解决方案是将处理后的数据(不仅是查询集,而且是算法应用后的数据查询集)存储在一个名为“ProcessedData”的模型中 因此,当提示用户访问能源报告时,主管经理将查询first ProcessData和

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

我的用户需要经常访问能量消耗报告,因此model.manager负责查询大量记录,应用一种需要2秒左右时间的算法,这是很长的时间。我测试了memcached,但运气不佳,因为一段时间后缓存的数据不可用,但用户经常返回查看相同的报告。因此,我对这个性能问题的潜在解决方案是将处理后的数据(不仅是查询集,而且是算法应用后的数据查询集)存储在一个名为“ProcessedData”的模型中

因此,当提示用户访问能源报告时,主管经理将查询first ProcessData和if
ProcessData.objects.filter(field1='field1').exist()
:返回的数据将直接传递到模板以进行可视化。如果之前未要求提供所需数据,则主管经理必须应用算法并将请求发送回用户


这是一个好方法吗?

在开始类似的工作之前,我肯定会给类似的项目一个尝试,他们做模型缓存,而且做得很好

我认为johnny cache它更适合您的需要,因为它永远不会过期queryset缓存

我不知道你说的“缓存数据不可用”是什么意思,但你可以通过几种方式轻松解决这个问题(例如,使用像redis这样的持久缓存后端)

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


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

当我使用查询结果作为输入处理数据时,我知道当我使用johny cache的memcache时,该查询甚至发送给用户的请求都会被缓存,当一天中的12小时后需要该数据时,就会出现问题。在这种情况下,根据与其他用户的数据库交互量,最初缓存的已处理数据不可用。您是否尝试过类似于django cache utils的@cached decorator的方法?将其与一个永不过期的自定义缓存后端相结合(例如johnny cache会这样做,因为django不支持“永远”),您就拥有了持久的结果缓存