有没有办法忽略Django中的Cache错误?

时间:2010-12-23 04:33:31

标签: django caching

我只是将我们的开发Django站点设置为使用redis作为缓存后端,它一切正常。我把Redis搞砸了,看看会发生什么,而且由于缓存后端行为,确实有足够的Django 404。连接被拒绝或其他各种错误。

有没有办法指示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://')

但这不起作用,因为我试图在设置缓存类型的调用中设置缓存类型。这一切都非常混乱。

那么,有没有简单的方法来吞下缓存错误?或者在失败时设置默认缓存后端?

3 个答案:

答案 0 :(得分:2)

查看 django-cache-fallback

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

template<typename T>
class Base : public QObject{
public:

    void createTemp(){
        qDebug()<<(new T)->metaObject()->className();
    }

    void* mCreateTemp;

    Base(){
        mCreateTemp = (void*)(&Base::createTemp);
    }
};

答案 1 :(得分:0)

我还没有使用它,但是这里有一个Django代码片段,声称提供了一个带有后备功能的缓存后端:http://djangosnippets.org/snippets/2193/

答案 2 :(得分:0)

看起来没有任何好方法可以做我想要的,而不会将错误直接写入缓存后端支持的方法。即使后端的init失败,一些后端只会在第一次访问后端时抛出错误。

我所做的是修改后端以包装所有带错误处理的方法,这些方法以传递给构造函数的参数为​​条件。不像我想的那么好......但它是最不具侵入性的。

调用代码无需更改,因此,如果您愿意,可以维护界面。