2010-12-23 65 views
6

我剛剛設置我們的開發Django站點使用redis作爲緩存後端,並且它都工作正常。我放下了redis以查看會發生什麼,並確定Django 404的緩存後端行爲。連接被拒絕或其他各種錯誤。有沒有辦法忽略Django中的Cache錯誤?

有什麼辦法可以指示Django忽略Cache錯誤,並繼續處理正常的方式嗎?看起來很奇怪,緩存是一種性能優化,但如果失敗,可能會導致整個網站崩潰。

我試着寫圍繞後端的包裝,像這樣:

class CacheClass(redis_backend.CacheClass): 
    """ Wraps the desired Cache, and falls back to global_settings default on init failure """ 
    def __init__(self, server, params): 
     try: 
      super(CacheClass, self).__init__(server, params) 
     except Exception: 
      from django.core import cache as _ 
      _.cache = _.get_cache('locmem://') 

但是,這是行不通的,因爲我正在嘗試設置在設置緩存類型呼叫的緩存類型。這是一個非常大的混亂。

那麼,是否有任何簡單的方法來緩存緩存錯誤?或者在失敗時設置默認緩存後端?

回答

0

它看起來不像有做我想做什麼好的辦法,而不會將錯誤直接寫入緩存後端支持的方法中。即使後端的初始化失敗,一些後端只會在第一次訪問後端時出錯。

我所做的是修改後端,以包含錯誤處理的所有方法,這是有條件的傳遞給構造函數的參數。沒有我想要的那麼好,但它是最沒有侵入性的。

調用代碼中的任何內容都不需要更改,因此如果您願意,可以維護接口。

0

我還沒有使用它,但這裏有一個聲稱提供一個緩存後端與回退功能Django的片段:http://djangosnippets.org/snippets/2193/

+0

感謝您的鏈接,但它允許支持多個後端。錯誤處理代碼仍然需要去某處 - 並且從調用者中刪除是我所追求的。 – 2011-01-02 10:50:31

1

Django的緩存後備

https://pypi.python.org/pypi/django-cache-fallback/0.2.1

CACHES = { 
    # Set default cache to FallbackCache 
    'default': { 
     'BACKEND': 'cache_fallback.FallbackCache', 
    }, 
    # Your production main cache (Redis, for example) 
    'main_cache': { 
     'BACKEND': 'redis_lock.django_cache.RedisCache', 
     'LOCATION': redis_url, 
     'OPTIONS': { 
      'CLIENT_CLASS': 'django_redis.client.DefaultClient', 
     }, 
     'TIMEOUT': 500, 
    }, 
    # Use dummy cache to ignore main cache errors and get data from DB 
    'fallback_cache': { 
     'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 
    } 
} 
相關問題