2009-04-06 17 views
9

मैं बैकएंड के रूप में memcached के साथ साइट वाइड कैशिंग का उपयोग कर रहा हूं। अंतर्निहित डेटाबेस ऑब्जेक्ट में परिवर्तन होने पर मैं कैश में पृष्ठों को अमान्य करना चाहता हूं।Django के कैश से विशिष्ट वस्तुओं को हटा रहा है?

पेज नाम बदलता है तो मैं पूरी कैश अमान्य हैं (यह हर पृष्ठ पर नेविगेशन को प्रभावित करता है। अनाड़ी, लेकिन मेरी आवश्यकताएं पूरी करने में।

सिर्फ पेज की सामग्री में परिवर्तन तो मैं रद्द करने के लिए करना चाहते हैं तो सिर्फ इतना है कि पेज के कैश।

वहाँ एक आसान तरीका यह करने के लिए है?

उत्तर

4

tghw का समाधान वास्तव में काम नहीं करता है, क्योंकि कैश कुंजी पूर्ण पथ नहीं है। कुंजी को पूर्ण पथ और HTTP शीर्षलेख से गणना की जाती है। उदाहरण के लिए this question देखें।

5

मैं Django के साथ कैशिंग का एक बहुत नहीं किया है, लेकिन मुझे लगता है तुम यहाँ क्या चाहते signals हैं।

आप 012 सेट अप कर सकते हैं अंतर्निहित ऑब्जेक्ट परसिग्नल, और कॉलबैक फ़ंक्शन उस पृष्ठ को कैश में अमान्य कर देता है।

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) 

यह अद्यतन होने पर कैश से आइटम को ठीक से हटा देना चाहिए।

+0

मुझे cache.delete के बारे में पता नहीं था प्रेषक.get_absolute_url() मुझे सही कैश कुंजी प्राप्त करता है? मैं साइट-व्यापी कैशिंग कुंजी कैसे उत्पन्न करता है इस पर कोई दस्तावेज नहीं देख सकता। –

+0

क्या यह वास्तव में काम करता है ?? – simplyharsh

+1

"डिफ़ॉल्ट रूप से, Django की कैश प्रणाली अनुरोधित पथ (उदाहरण के लिए,"/कहानियां/2005/जून/23/bank_robbed/") का उपयोग करके अपनी कैश कुंजी बनाता है।" (Http://docs.djangoproject.com/en/dev/topics/cache/) – michuk

संबंधित मुद्दे