[英]How to disable Django Internal function cache?
我正在使用Redis作为后端缓存[1]来进行一些Django项目,但是我无法确定Redis Server始终处于打开状态,那么我尝试使用Redis“如果”可用,否则请使用其他后端,例如LocMem等。
我正在使用的Redis后端[1]完全兼容,因此我可以使用Django Decorations。
我当时想创建一个这样的函数:
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))
问题是,即使我删除了RedisServer,Django(我想是内部的)也缓存了PingBackend()的响应并仅在第一次调用它,Django告诉我ping过程已成功。
即使DEBUG = True且“默认” 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 Server。
谢谢!
这与Django内部无关,这与装饰器的工作方式有关。 当您这样定义视图时:
@cache_page(60, cache=PingBackend(time()))
def index(request):
blah blah
完全等于:
def index(request):
blah blah
index = cache_page(60, cache=PingBackend(time()))(index)
您只调用cache_page
一个,向它传递一个通过调用一次PingBackend
获得的cache
参数。 它甚至不仅仅针对第一个请求执行,而是在定义视图函数时执行一次。
您应该编写自己的使用Redis的缓存后端,如果可用,则使用Redis。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.