【发布时间】:2019-07-03 02:35:13
【问题描述】:
当我像这样使用 cache_page 装饰器时,如何确认我的 Django 视图正在被缓存:
@cache_page(60)
def my_view(request):
理想情况下,我想在控制台中输出缓存命中/未命中消息,以便确认我的视图被缓存了 60 秒等。
非常感谢, g
【问题讨论】:
当我像这样使用 cache_page 装饰器时,如何确认我的 Django 视图正在被缓存:
@cache_page(60)
def my_view(request):
理想情况下,我想在控制台中输出缓存命中/未命中消息,以便确认我的视图被缓存了 60 秒等。
非常感谢, g
【问题讨论】:
您可以获取django-debug-toolbar (http://github.com/robhudson/django-debug-toolbar) 的副本并观察查询:如果页面没有从缓存中拉出,django-debug-toolbar 应该显示所有需要的查询组装您的页面。如果页面是从缓存中提取的,您将看不到查询。
您还可以将日志记录添加到您正在使用的特定缓存包装器中,然后在django-debug-toolbar 的“日志记录”面板中引用输出。下面是一个示例:http://gist.github.com/242011
如果您有兴趣详细监控 memcache 的使用情况,我还建议您获取一份 django-memcache-status (http://github.com/bartTC/django-memcache-status) 和 memcache-top (http://code.google.com/p/memcache-top/) 的副本。
【讨论】:
根据您使用的缓存中间件,您可以检查该类的process_request 方法并找到类似这样的行(取自django/middleware/cache.py)
131 response = cache.get(cache_key, None)
132 if response is None:
133 ...
... logging.debug("Cache miss")
...
... else:
... logging.debug("Cache hit")
并从那里记录消息。我承认,这不是一个干净的方法。
【讨论】:
您可以通过查看 HTTP 响应中的标头来确认您的页面是否已缓存。
$ curl -v http://localhost:8000/cached_view/ >/dev/null
[...]
< Cache-Control: max-age=900
< Expires: Tue, 02 Jul 2019 18:36:34 GMT
[...]
Cache-Control 和 Expires 都表示在生成响应时涉及缓存。
【讨论】: