Ale*_*der 9 django django-cache
我一直在使用数据库缓存在Django中设置缓存.TIMEOUT和CACHE_MIDDLEWARE_SECONDS有两个设置,用于控制页面缓存的时间长度.这两个设置有什么区别?
实际上,各自的文件没有充分解释这些差异.
第一个选项是CACHES:TIMEOUT在Django缓存框架中引入了Cache参数.它是在函数中使用的默认过期时间cache.set(),如果没有提供其他函数.稍后将记录在低级缓存API用法中.
后者CACHE_MIDDLEWARE_SECONDS是在Django缓存框架中引入的每站点缓存.因此,可以安全地假设它是所有页面的默认过期时间,就好像它@cache_page(settings.CACHE_MIDDLEWARE_SECONDS)已经基于每个视图使用一样.
我有同样的问题,现有的答案仍然没有为我清楚.所以我决定深入研究源代码.耶和开源!
CACHE_MIDDLEWARE_SECONDS被UpdateCacheMiddleware中间件使用.它将Cache-Control(max-age)标头CACHE_MIDDLEWARE_SECONDS设置为视图尚未设置它的值,从而影响客户端缓存.这是代码:
self.cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
# ...
timeout = get_max_age(response)
if timeout is None:
timeout = self.cache_timeout
patch_response_headers(response, timeout)
Run Code Online (Sandbox Code Playgroud)
(请注意,我正在删除一些代码和边角以便更快地阅读,您当然可以自己阅读完整的源代码.)
它还使用相同的超时值保存服务器端缓存中的响应,如果已设置则MIDDLEWARE_CACHE_SECONDS覆盖该TIMEOUT设置:( 上下文)
if timeout:
cache_key = learn_cache_key(request, response, timeout, self.key_prefix, cache=self.cache)
self.cache.set(cache_key, response, timeout)
Run Code Online (Sandbox Code Playgroud)
中间件FetchFromCacheMiddleware随之UpdateCacheMiddleware而来,它使用后者设置的服务器端缓存值,因此它间接受到影响CACHE_MIDDLEWARE_SECONDS.
替代中间件CacheMiddleware也使用CACHE_MIDDLEWARE_SECONDS.除非您使用,否则这不会影响您CacheMiddleware.
那么TIMEOUT设置的重点是什么?我想这是你直接写入缓存时使用的默认值,但前面提到的中间件没有使用它.例如:
from django.core.cache import cache
cache.set('my_key', 'my_value') # uses TIMEOUT value as default
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3674 次 |
| 最近记录: |