我使用Redis作爲後端緩存[1]製作了一些Django項目,但我無法確定Redis服務器會一直處於開啓狀態,然後我試圖使用Redis「if if」它可用使用LocMem等其他後端。如何禁用Django內部函數緩存?
我正在使用的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爲dummy的情況下也會發生。
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
我傳遞時間()只是創造一些分化爲嘗試解決緩存problm。
大的情況是,函數PingBackend()沒有爲每個請求執行,只是首先我無法監視Redis服務器。
謝謝!
[1] - https://github.com/niwibe/django-redis
非常感謝,我想你說得對,cya! – 2012-07-23 05:07:14