如何在Django中缓存几分钟的查询结果?

时间:2015-03-15 13:44:08

标签: django django-queryset

我有这样的查询:

profiles = UserProfile.objects.all().order_by('-created')

有数千个用户配置文件,因此查询成本很高。所以我想知道如何缓存结果5分钟。

我看过this doc但找不到答案。

1 个答案:

答案 0 :(得分:1)

您应该看一下herehere

本质上,django的查询集是惰性的,它们维护缓存,这意味着它们只在第一次评估时才调用db。这意味着您的profile变量将仅在其生命周期内查询数据库一次(除非您执行profile.filter()或类似的更改查询,在这种情况下必须重新评估它。)

现在,关于你的问题的重要部分是变量的生命周期。一旦返回定义的方法,它将超出范围,换句话说,它将为每个新请求重新创建,查询数据库。为了避免这种情况,您可以使用memcached或类似的系统 OR 来缓存结果,方法是将profile变量设为全局变量,这将在请求之间保持不变。