我只是将我们的开发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://')
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为我试图在设置缓存类型的调用中设置缓存类型.这一切都非常混乱.
那么,有没有简单的方法来吞下缓存错误?或者在失败时设置默认缓存后端?
小智 5
看看django-cache-fallback:
https://pypi.python.org/pypi/django-cache-fallback/0.2.1
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',
}
}
Run Code Online (Sandbox Code Playgroud)
如果不将错误处理直接写入缓存后端支持的方法,看起来没有什么好方法可以完成我想要的事情。即使后端的init失败,有些后端也只会在第一次访问后端时抛出错误。
我所做的是修改后端以包装所有带有错误处理的方法,该错误处理以传递给构造函数的参数为条件。没有我想要的那么好..但它是干扰最小的。
调用代码中无需更改任何内容,因此如果您愿意,可以维护接口。
| 归档时间: |
|
| 查看次数: |
1824 次 |
| 最近记录: |