我正在使用 Redis 作为后端缓存 [1] 制作一些 Django 项目,但我不能确定 Redis 服务器是否会一直打开,然后我尝试使用 Redis “如果”它可用,否则使用一些其他后端,如 LocMem 等。
我使用的 Redis 后端 [1] 完全兼容,因此我可以使用 Django 装饰。
我想创建一个这样调用的函数:
from django.views.decorators.cache import cache_page
from utils import PingBackend
from time import time
@cache_page(60, cache=PingBackend(time()))
def index(request):
artigos = Artigo.objects.filter(ativo=1)
return render_to_response('index.html', {'artigos':artigos}, RequestContext(request))
问题是 Django(我猜是内部的)缓存 PingBackend() 的响应并在第一次调用它,即使我删除了 RedisServer Django 告诉 ping 过程成功。
即使 DEBUG=True 和 'default' CacheBackend 为虚拟,它也会发生。
def PingBackend(time):
print time
response = None
try:
con = StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0)
# Execute some action
con.ping()
# If not give an exception, use redis
response = 'redis'
except:
response = 'default' #dummy
return last_response
我传递 time() 只是为了创建一些差异化作为尝试解决缓存问题。
大局是函数 PingBackend() 没有为每个请求执行,只是第一次我无法监控 Redis 服务器。
谢谢!