Django

2012-09-24 9 views
13

में विशिष्ट प्रविष्टि के लिए कैश को हटा नहीं सकता है, मैं सिग्नल का उपयोग करके सहेजे जाने पर एक विशिष्ट प्रविष्टि के लिए कैश को शुद्ध करने का प्रयास कर रहा हूं।Django

मैं django-annoying

@signals.post_save(sender=Artigo) 
def artigo_post_save(instance, **kwargs): 

    from django.http import HttpRequest 
    from django.utils.cache import get_cache_key 
    from django.core.cache import cache 

    # cache.delete(instance.get_absolute_url()) # not work 

    request = HttpRequest() 
    request.method = "GET" 
    request.path = '/' + instance.get_absolute_url() 

    print 'request path: ', request.path 

    key = get_cache_key(request=request, 
         key_prefix=settings.CACHE_MIDDLEWARE_KEY_PREFIX) 

    print "found key" if cache.has_key(key) else "notfound key" 

    if cache.has_key(key): 
     cache.delete(key) 
     cache.set(key, None, 0) 
    समस्या
  • से सज्जाकार (signals और render_to) का उपयोग कर रहा है कि जब मैं मॉडल बचाने के लिए, मैं उत्पादन "notfound key" मिलता है, इसलिए कैश पर्ज बिना जारी है
  • request.path मेरे प्रवेश पथ के लिए ठीक से बिंदु हैं।

कुछ सेटिंग:

SESSION_ENGINE = "django.contrib.sessions.backends.cache" 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True 
CACHE_MIDDLEWARE_KEY_PREFIX = 'cache' 
CACHE_MIDDLEWARE_SECONDS = 600 

CACHES = { 
    'default': { 
      'LOCATION': '', 
      'BACKEND': 'django.core.cache.backends.locmem.LocMemCache' 
    }, 
} 

और दृश्य:

@cache_page(60 * 60) 
@render_to('artigo.html') 
def artigo(request, categoria_slug, extra_slug="", artigo_slug=""): 
    ... 

धन्यवाद।

संपादित करें:
मैं Ilvar परिवर्तन किया था और अब मैं "found key" वापसी के रूप में मिल रहा है लेकिन मैं अभी भी कैश को नष्ट नहीं कर सकते हैं:

key = _generate_cache_header_key(key_prefix=settings.CACHE_MIDDLEWARE_KEY_PREFIX, request=request) 
    key = key.replace(settings.LANGUAGE_CODE, settings.LANGUAGES[0][0]) 

सम्मेलन:

LANGUAGE_CODE = 'pt-BR' 

LANGUAGES = (
     ('pt-BR','Portugues'), 
) 
  • जब मैं Gevent सर्वर को पुनरारंभ करता हूं तो मेरे पास केवल सामग्री अपडेट होती है।
+0

किसी तरह 'key' की अपनी गणना मूल्य मूल्य CacheMiddleware से मूल्य से अलग होना चाहिए। मैं डीबगर/प्रिंट कथन का उपयोग करके 'django/middleware/cache.py' FetchFromCacheMiddleware' और' UpdateCacheMiddleware' में 'cache_key' के मानों को देखने का प्रयास करूंगा। – user27478

+2

बस यह जांचने के लिए कि क्या समस्या पुन: उत्पन्न होगी, कैशिंग इंजन को memcached या redis की तरह smth करने की कोशिश करें। – alecxe

+0

यदि आप लोकेशंस का उपयोग कर रहे हैं, तो get_cache_key कैश कुंजी बनाने के लिए भाषा कोड का भी उपयोग करता है, इसे अपने कोड → request.LANGUAGE_CODE = सेटिंग्स में जोड़ें। LANGUAGE_CODE –

उत्तर

2

कैश.सेट (कुंजी, कोई नहीं, 0) पर्याप्त होना चाहिए, मैं पहले से कैश कुंजी साफ़ कर रहा हूं।

यदि आप सक्षम हैं, तो क्या आप इसे साफ़ करने के लिए कैश.क्लर() को आजमा सकते हैं? बस यह देखने के लिए कि यह काम करता है।

क्या आपकी कैश कुंजी अनुपलब्ध नहीं है? क्या इसका उत्पादन अपेक्षित है?

cache.set('testkey', 'testvalue', 600) 
cache.get('testkey') 
cache.delete('testkey') 
cache.get('testkey') 
cache.set('testkey', 'testvalue2', 600) 
cache.set('testkey', 'another value', 600) 
cache.get('testkey') 

और क्या आपने एक और कैशिंग बैकएंड के साथ प्रयास किया है? ऐसा लगता है कि आप जो भी कर रहे हैं वह सही है।

हो सकता है कि त्रुटि बैकएंड में है, कुछ विन्यास .. कि अभ्यस्त यह चाबी या कुछ अजीब के ऊपर लिख जाने