2009-04-06 31 views
9

Tôi đang sử dụng bộ nhớ đệm trên toàn bộ trang web với memcached làm chương trình phụ trợ. Tôi muốn vô hiệu hóa các trang trong bộ nhớ cache khi thay đổi đối tượng cơ sở dữ liệu bên dưới.Xóa các mục cụ thể khỏi bộ đệm của Django?

Nếu tên trang thay đổi sau đó tôi sẽ làm mất hiệu lực toàn bộ bộ nhớ cache (vì nó ảnh hưởng đến giao thông trên mỗi trang. Clumsy nhưng đủ cho nhu cầu của tôi.

Nếu chỉ là thay đổi nội dung trang sau đó tôi muốn làm mất hiệu lực bộ nhớ cache của chỉ trang đó.

có một cách dễ dàng để làm điều này?

Trả lời

4

giải pháp của tghw không thực sự hoạt động, vì khóa bộ nhớ cache KHÔNG phải là đường dẫn tuyệt đối. Khóa được tính từ đường dẫn tuyệt đối và tiêu đề HTTP. Xem this question để biết ví dụ.

5

tôi đã không thực hiện rất nhiều bộ nhớ đệm với Django, nhưng tôi nghĩ rằng những gì bạn muốn ở đây là signals.

bạn có thể thiết lập 012 Tín hiệutrên đối tượng bên dưới và có chức năng gọi lại làm mất hiệu lực trang đó trong bộ nhớ cache.

from django.core.signals import post_save 
from django.core.cache import cache 

def invalidate_cache(sender, **kwargs): 
    # invalidate cache 
    cache.delete(sender.get_absolute_url()) # or any other pertinent keys 

post_save.connect(invalidate_cache, sender=UnderlyingModel) 

Điều này sẽ xóa mục đó khỏi bộ đệm khi được cập nhật đúng cách.

+0

Tôi không biết về cache.delete Liệu người gửi.get_absolute_url() có cho tôi khóa bộ nhớ cache chính xác không? Tôi không thể thấy bất kỳ tài liệu nào về cách bộ đệm ẩn trên trang web tạo khóa. –

+0

Ứng dụng có thực sự hoạt động không ?? – simplyharsh

+1

"Theo mặc định, hệ thống bộ nhớ cache của Django tạo khóa bộ nhớ cache bằng cách sử dụng đường dẫn được yêu cầu (ví dụ:"/stories/2005/jun/23/bank_robbed/")." (http://docs.djangoproject.com/en/dev/topics/cache/) – michuk

Các vấn đề liên quan