我刚刚将我们的Django开发站点设置为使用redis作为缓存后端,一切正常。我关闭了redis来看看会发生什么,果然Django 404是由于缓存后端的行为。要么是连接被拒绝,要么是其他各种错误。
有没有什么方法可以让Django忽略缓存错误,并继续正常处理?缓存是一种性能优化,但如果失败,可能会导致整个站点崩溃,这似乎很奇怪。
我试着在后端写一个 Package 器,如下所示:
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://')
但这行不通,因为我试图在设置缓存类型的调用中设置该高速缓存类型。
那么,有没有简单的方法来吞下缓存错误?或者设置默认的缓存后端失败?
4条答案
按热度按时间mftmpeh81#
查看django-cache-fallback:
https://pypi.python.org/pypi/django-cache-fallback/0.2.1
pengsaosao2#
看起来没有什么好的方法来做我想做的事情,而不直接将错误处理写入该高速缓存后端支持的方法中。即使后端的init失败,一些后端也只会在第一次访问后端时抛出错误。
我所做的是修改了后端,以 Package 所有的错误处理方法,该错误处理是以传递给构造函数的参数为条件的。没有我想要的那么好..但它是最少侵入的。
调用代码中不需要任何更改,因此接口(如果您愿意的话)将得到维护。
rbpvctlc3#
我没有使用过它,但这里有一个Django片段,声称提供了一个具有回退功能的缓存后端:http://djangosnippets.org/snippets/2193/
2wnc66cl4#
创建CustomCache
类似地实现其它方法,如has_key()、delete()、clear()、all_keys()等。
现在到处都导入这个custom_cache而不是django.core.cache