有没有一种方法可以忽略Django中的缓存错误?
我刚刚将我们的开发Django站点设置为使用redis作为缓存后端,一切正常。我把redis带下来看看会发生什么,Django404肯定是由于缓存后端行为造成的。要么连接被拒绝,要么出现其他各种错误 是否有任何方法可以指示Django忽略缓存错误,并继续以正常方式处理?缓存是一种性能优化,但如果失败,可能会导致整个站点停机,这似乎很奇怪 我尝试在后端编写一个包装器,如下所示:有没有一种方法可以忽略Django中的缓存错误?,django,caching,Django,Caching,我刚刚将我们的开发Django站点设置为使用redis作为缓存后端,一切正常。我把redis带下来看看会发生什么,Django404肯定是由于缓存后端行为造成的。要么连接被拒绝,要么出现其他各种错误 是否有任何方法可以指示Django忽略缓存错误,并继续以正常方式处理?缓存是一种性能优化,但如果失败,可能会导致整个站点停机,这似乎很奇怪 我尝试在后端编写一个包装器,如下所示: class CacheClass(redis_backend.CacheClass): """ Wraps th
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://')
但这不起作用,因为我试图在设置缓存类型的调用中设置缓存类型。一切都是一团糟
那么,有什么简单的方法可以消除缓存错误吗?或者在出现故障时设置默认缓存后端?我还没有使用它,但这里有一个Django代码段声称为缓存后端提供了一个回退功能:看起来没有什么好方法可以做我想要的事情,而不会将错误直接写入缓存后端支持的方法中。即使后端的init失败,一些后端也只会在首次访问后端时抛出错误 我所做的是修改后端,以使用错误处理包装所有方法,该错误处理以传递给构造函数的参数为条件。没有我想要的那么好。。但这是最不具侵扰性的
调用代码中无需任何更改,因此如果愿意,接口将得到维护。请查看django缓存回退:
感谢您的链接,但这允许支持多个后端。错误处理代码仍然需要去某个地方,而从调用者中删除是我所追求的。我认为它的回退功能有可能满足您“在出现故障时设置默认缓存后端”的目标。不是吗?不是。只有当无法从缓存中检索到值时,该实现才会“回退”。不,它在哪里处理错误。我最初的规范是关闭的,因为失败可能会发生在初始化之后。在这一点上设置一个新的后端似乎是不合理的,除非它是在后端本身中专门处理的。
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',
}
}