Tôi đã thiết lập bộ nhớ đệm ở Django bằng bộ nhớ cache của cơ sở dữ liệu. Có hai cài đặt TIMEOUT và CACHE_MIDDLEWARE_SECONDS kiểm soát thời gian lưu trữ một trang. Sự khác nhau giữa hai cài đặt này là gì?Khuôn khổ bộ nhớ cache Django. Sự khác nhau giữa TIMEOUT và CACHE_MIDDLEWARE_SECONDS là gì?
Trả lời
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.
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ợ.
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
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
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
- 1. Sự khác nhau giữa bộ nhớ đệm và bộ nhớ cache trống là gì?
- 2. sự khác biệt giữa bộ nhớ cache l1 và bộ nhớ cache l2 là gì?
- 3. Sự khác nhau giữa "nhập khẩu" khuôn khổ và "liên kết" với khung là gì?
- 4. Sự khác biệt giữa không có bộ nhớ cache và không lưu trữ trong bộ nhớ Cache-control là gì?
- 5. Khuôn khổ bộ nhớ cache tốt nhất cho Java
- 6. Sự khác nhau giữa việc sử dụng API bộ nhớ cache của công nhân dịch vụ và bộ nhớ cache của trình duyệt thông thường là gì?
- 7. Sự khác nhau giữa mocha và Selenium là gì?
- 8. Sự khác nhau giữa HTML5 AppCache và bộ nhớ cache của trình duyệt thông thường là gì?
- 9. Firebase: Sự khác nhau giữa setPersistenceEnabled và keepSynced là gì?
- 10. Sự khác nhau giữa tiêu diệt() và unpersist() là gì?
- 11. Sự khác nhau giữa các thông số kiểm soát bộ nhớ cache khác biệt này là gì?
- 12. Sự khác nhau giữa RSpec và Cucumber là gì?
- 13. Sự khác nhau giữa các lỗi timeout appengine datastore 5 và 11 là gì?
- 14. Sự khác nhau giữa @dynamic và @synthesize là gì?
- 15. Sự khác nhau giữa GetBlobReference và GetBlobReferenceFromServer là gì?
- 16. Sự khác nhau giữa PermGen và Metaspace là gì?
- 17. Sự khác nhau giữa khối NSAutoreleasePool và @autoreleasepool là gì?
- 18. Sự khác nhau giữa hai bộ chọn này là gì?
- 19. Sự khác nhau giữa FileStream.Flush() và FileStream.Flush (True) là gì?
- 20. sự khác nhau giữa Haskell và PureScript là gì?
- 21. Sự khác nhau giữa Matcher.lookingAt() và find() là gì?
- 22. Sự khác nhau giữa ODBC và OleDB là gì?
- 23. Sự khác nhau giữa SyncML và CalDAV là gì?
- 24. Sự khác nhau giữa NSIndexSet và NSSet là gì?
- 25. Sự khác nhau giữa IDbSet.Add và DbEntityEntry.State = EntityState.Added là gì?
- 26. Sự khác nhau giữa .serialize() và .serializeArray() là gì?
- 27. Sự khác nhau giữa ImageMagick và GraphicsMagick là gì?
- 28. Sự khác nhau giữa BaseAdapter và ArrayAdapter là gì?
- 29. Sự khác nhau giữa Promise và AJAX là gì?
- 30. Sự khác nhau giữa cookie và cookiejar là gì?
'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