2012-09-24 27 views
13

Tôi đang cố gắng xóa bộ nhớ cache cho một Mục nhập cụ thể khi được lưu bằng tín hiệu.Không thể xóa bộ nhớ cache cho mục nhập cụ thể trong Django

Tôi đang sử dụng trang trí (signalsrender_to) từ 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) 
  • Vấn đề là khi tôi lưu các mô hình, tôi nhận ra "notfound key", vì vậy bộ nhớ cache tiếp tục mà không thanh trừng
  • request.path đang trỏ đúng vào đường dẫn nhập của tôi.

Một số thiết lập:

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' 
    }, 
} 

Và quan điểm:

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

Cảm ơn bạn.

EDIT:
tôi đã làm Ilvar thay đổi và bây giờ tôi nhận được "found key" như trở lại nhưng tôi vẫn không thể xóa cache:

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

Conf:

LANGUAGE_CODE = 'pt-BR' 

LANGUAGES = (
     ('pt-BR','Portugues'), 
) 
  • Tôi chỉ có nội dung cập nhật khi tôi khởi động lại máy chủ Gevent.
+0

Bằng cách nào đó giá trị giá trị tính của bạn của 'key' phải khác với giá trị từ CacheMiddleware. Tôi sẽ thử quan sát các giá trị của 'cache_key' trong' django/middleware/cache.py' 'FetchFromCacheMiddleware' và' UpdateCacheMiddleware' bằng cách sử dụng trình gỡ lỗi hoặc lệnh in. – user27478

+2

Chỉ để kiểm tra xem sự cố có thể sao chép hay không, hãy thử thay thế công cụ lưu vào bộ nhớ cache thành smth như memcached hoặc redis. – alecxe

+0

Nếu bạn đang sử dụng ngôn ngữ, get_cache_key cũng sử dụng mã Ngôn ngữ để tạo khóa bộ nhớ cache, thêm mã này vào mã của bạn → request.LANGUAGE_CODE = settings.LANGUAGE_CODE –

Trả lời

2

cache.set (khóa, Không, 0) là đủ, tôi đã xóa các khóa bộ nhớ cache theo cách đó trước đây.

Nếu bạn có thể, bạn có thể thử cache.clear(), để xóa tất cả không? Chỉ để xem nó có hoạt động không.

Các khóa bộ nhớ cache của bạn có bị xóa không? Là đầu ra của điều này như mong đợi?

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') 

Và bạn đã thử với một chương trình phụ trợ đệm khác chưa? Có vẻ như mọi thứ bạn đang làm đều chính xác.

Có lẽ lỗi là ở phụ trợ, một số cấu hình mà sẽ không để cho nó ghi đè lên phím hoặc một cái gì đó kỳ lạ ..

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