2014-10-05 12 views

Trả lời

2

Thực tế, tài liệu tương ứng không giải thích đầy đủ về sự khác biệt.

Tùy chọn đầu tiên, CACHES: TIMEOUT được giới thiệu trong Django cache framework, Cache arguments. Đó là thời gian hết hạn mặc định được sử dụng trong các chức năng như cache.set(), nếu không có cách nào khác được cung cấp. Điều này sau này được ghi lại trong số low-level cache API usage.

Sau, CACHE_MIDDLEWARE_SECONDS được giới thiệu trong Django cache framework, The per-site cache. Do đó, có thể an toàn cho rằng đây là thời gian hết hạn mặc định cho tất cả các trang, như thể @cache_page(settings.CACHE_MIDDLEWARE_SECONDS) sẽ được sử dụng trên cơ sở per-view.

+0

'TIMEOUT' chỉ ảnh hưởng đến bộ nhớ đệm phía máy chủ, trong khi' CACHE_MIDDLEWARE_SECONDS' ảnh hưởng đến cả bộ nhớ đệm phía máy khách và phía máy chủ. Tôi có đúng không? – Flimm

0

Theo http://www.djangobook.com/en/2.0/chapter15.html, TIMEOUT là thời gian chờ để kết nối với phần phụ trợ bộ nhớ cache và CACHE_MIDDLEWARE_SECONDS là số giây để lưu vào bộ nhớ cache một trang. Vì vậy, TIMEOUT không nhất thiết phải hữu ích cho tất cả các chương trình phụ trợ.

+0

Cảm ơn câu trả lời nhưng tôi không chắc tôi hiểu sự khác biệt. Theo các tài liệu https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-CACHES-TIMEOUT Timeout là 'Số giây trước khi một mục nhập bộ nhớ cache được coi là cũ'. Điều đó có nghĩa là điều tương tự như 'TIMEOUT là thời gian chờ để kết nối với bộ đệm phụ trợ' không? – Alexander

+0

Bạn nói xấu. Tài liệu tham khảo tôi đưa ra là, theo cách riêng của nó, "cực kỳ lỗi thời". Kể từ khi bộ đệm Django cung cấp quyền truy cập vào chi tiết tốt hơn so với toàn bộ các trang, tôi đoán đó là những gì TIMEOUT dành cho.CACHE_MIDDLEWARE chỉ có thể xử lý toàn bộ các trang, vì vậy bạn có thể muốn thời gian chờ khác nhau cho điều đó. Chúng tôi sẽ phải tham khảo mã để chắc chắn. – velotron

2

Tôi đã có cùng một câu hỏi và câu trả lời hiện có vẫn chưa rõ ràng cho tôi. Vì vậy, tôi quyết định đi sâu vào mã nguồn. Yay cho nguồn mở!

CACHE_MIDDLEWARE_SECONDS được sử dụng bởi phần mềm trung gian UpdateCacheMiddleware. Nó đặt tiêu đề Cache-Control (max-age) thành giá trị CACHE_MIDDLEWARE_SECONDS nếu chế độ xem chưa được đặt, ảnh hưởng đến bộ nhớ cache phía máy khách. Dưới đây là các mã:

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) 

(Lưu ý rằng tôi đang cắt ra một số mã và cạnh góc để làm cho điều này nhanh hơn để đọc, bạn có thể đọc the full source đang cho mình tất nhiên.)

Nó cũng giúp tiết kiệm phản ứng trong bộ nhớ cache server-side, sử dụng giá trị timeout cùng có nguồn gốc từ MIDDLEWARE_CACHE_SECONDS, trọng thiết lập TIMEOUT nếu nó đã được thiết lập: (context)

if timeout: 
     cache_key = learn_cache_key(request, response, timeout, self.key_prefix, cache=self.cache) 
     self.cache.set(cache_key, response, timeout) 

các middleware FetchFromCacheMiddleware đi kèm với UpdateCacheMiddleware và nó sử dụng giá trị bộ nhớ cache phía máy chủ được đặt bởi sau, do đó, nó bị gián tiếp ảnh hưởng bởi CACHE_MIDDLEWARE_SECONDS.

Phần mềm trung gian thay thế CacheMiddleware cũng sử dụng CACHE_MIDDLEWARE_SECONDS. Điều này không ảnh hưởng đến bạn trừ khi bạn đang sử dụng CacheMiddleware.

Vậy điểm của cài đặt TIMEOUT là gì? Tôi cho rằng đó là giá trị mặc định được sử dụng nếu bạn đang ghi trực tiếp vào bộ nhớ cache, nhưng nó không được sử dụng bởi phần mềm trung gian đã đề cập trước đây. Ví dụ:

from django.core.cache import cache 
cache.set('my_key', 'my_value') # uses TIMEOUT value as default 
Các vấn đề liên quan