如何测试Django缓存?

17 投票
4 回答
8910 浏览
提问于 2025-04-11 20:34

有没有办法可以确保一个页面是在生产服务器和开发服务器上都是从缓存中加载的呢?

这个解决方案不应该涉及到缓存中间件,因为并不是每个项目都会用到它们。不过,解决方案本身可能一种中间件。

我觉得仅仅检查数据是否过时并不是一个很安全的测试方法。

4 个回答

8

模拟一下视图,访问页面,看看这个模拟是否被调用。如果没有被调用,那就说明使用了缓存。

16

彼得·罗威尔的建议很好,但你其实不需要为时间戳创建一个自定义的模板上下文处理器。你只需要使用模板标签就可以了:

 <!-- {% now "jS F Y H:i" %} --> 
20

我们做了很多组件缓存,但并不是所有的组件都会同时更新。所以我们在一个全局包含的上下文处理器中设置了主机和时间戳的值。在每个模板片段的顶部,我们加上:

<!-- component_name {{host}} {{timestamp}} -->

component_name 这个名字让我们在查看源代码时,能方便地搜索到这个字符串。

我们所有的对象详情页面都会定义一个上下文变量“page_object”,而这个变量是在 base.html 模板的顶部设置的:

<!-- {{page_object.class_id}} @ {{timestamp}} -->

class_id() 是一个来自超类的方法,所有主要内容类都会用到。它的内容就是:

def class_id(self):
    "%s.%s.%s" % (self.__class__._meta.app_label,
                    self.__class__.__name__, self.id)

如果你加载一个页面,发现任何时间戳都超过几秒钟,那就很可能这个组件是被缓存了。

撰写回答