Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以忽略Django中的缓存错误?_Django_Caching - Fatal编程技术网

有没有一种方法可以忽略Django中的缓存错误?

有没有一种方法可以忽略Django中的缓存错误?,django,caching,Django,Caching,我刚刚将我们的开发Django站点设置为使用redis作为缓存后端,一切正常。我把redis带下来看看会发生什么,Django404肯定是由于缓存后端行为造成的。要么连接被拒绝,要么出现其他各种错误 是否有任何方法可以指示Django忽略缓存错误,并继续以正常方式处理?缓存是一种性能优化,但如果失败,可能会导致整个站点停机,这似乎很奇怪 我尝试在后端编写一个包装器,如下所示: class CacheClass(redis_backend.CacheClass): """ Wraps th

我刚刚将我们的开发Django站点设置为使用redis作为缓存后端,一切正常。我把redis带下来看看会发生什么,Django404肯定是由于缓存后端行为造成的。要么连接被拒绝,要么出现其他各种错误

是否有任何方法可以指示Django忽略缓存错误,并继续以正常方式处理?缓存是一种性能优化,但如果失败,可能会导致整个站点停机,这似乎很奇怪

我尝试在后端编写一个包装器,如下所示:

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',
    }
}