Redis をバックエンド キャッシュ [1] として使用して Django プロジェクトをいくつか作成していますが、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() がリクエストごとに実行されていないことです。最初の 1 つだけで、Redis サーバーを監視できません。
ありがとうございました!