में विशिष्ट प्रविष्टि के लिए कैश को हटा नहीं सकता है, मैं सिग्नल का उपयोग करके सहेजे जाने पर एक विशिष्ट प्रविष्टि के लिए कैश को शुद्ध करने का प्रयास कर रहा हूं।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 सर्वर को पुनरारंभ करता हूं तो मेरे पास केवल सामग्री अपडेट होती है।
किसी तरह 'key' की अपनी गणना मूल्य मूल्य CacheMiddleware से मूल्य से अलग होना चाहिए। मैं डीबगर/प्रिंट कथन का उपयोग करके 'django/middleware/cache.py' FetchFromCacheMiddleware' और' UpdateCacheMiddleware' में 'cache_key' के मानों को देखने का प्रयास करूंगा। – user27478
बस यह जांचने के लिए कि क्या समस्या पुन: उत्पन्न होगी, कैशिंग इंजन को memcached या redis की तरह smth करने की कोशिश करें। – alecxe
यदि आप लोकेशंस का उपयोग कर रहे हैं, तो get_cache_key कैश कुंजी बनाने के लिए भाषा कोड का भी उपयोग करता है, इसे अपने कोड → request.LANGUAGE_CODE = सेटिंग्स में जोड़ें। LANGUAGE_CODE –