我只是将我们的开发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://')
但这不起作用,因为我试图在设置缓存类型的调用中设置缓存类型。这一切都非常混乱。
那么,有没有简单的方法来吞下缓存错误?或者在失败时设置默认缓存后端?
答案 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失败,一些后端只会在第一次访问后端时抛出错误。
我所做的是修改后端以包装所有带错误处理的方法,这些方法以传递给构造函数的参数为条件。不像我想的那么好......但它是最不具侵入性的。
调用代码无需更改,因此,如果您愿意,可以维护界面。