質問: ジョブの結果がすぐに破棄されると、redis がいっぱいになるのはなぜですか?
redis をキューとして使用して PDF を非同期的に作成し、結果をデータベースに保存しています。保存されているため、後でオブジェクトにアクセスする必要がないため、処理後に結果を Redis に保存しておく必要はありません。
結果が redis にとどまらないようにするために、次のように設定しTTL
ました0
。
parameter_dict = {
"order": serializer.object,
"photo": base64_image,
"result_ttl": 0
}
django_rq.enqueue(procces_template, **parameter_dict)
問題は、redis ワーカーがジョブの有効期限がすぐに切れると言っていることです。
15:33:35 Job OK, result = John Doe's nail order to 568 Broadway
15:33:35 Result discarded immediately.
15:33:35
15:33:35 *** Listening on high, default, low...
Redis はまだいっぱいになり、次のようにスローします。
ResponseError: command not allowed when used memory > 'maxmemory'
ジョブの結果がまだ保存されていない場合に redis がいっぱいにならないように、redis / django-rq に設定する必要がある別のパラメーターはありますか?
アップデート:
この投稿に続いて、redis でジョブが失敗したためにメモリがいっぱいになる可能性があると思います。
このコード スニペットの使用:
def print_redis_failed_queue():
q = django_rq.get_failed_queue()
while True:
job = q.dequeue()
if not job:
break
print job
以下は、redis のキーのダンプのペースト ビンです。
ここに投稿するには実用的であるには長すぎます。そのサイズは私の理論を支持しているようです。しかし、使用:
def delete_redis_failed_queue():
q = django_rq.get_failed_queue()
count = 0
while True:
job = q.dequeue()
if not job:
print "{} Jobs deleted.".format(count)
break
job.delete()
count += 1
私が期待するようにredisをクリアしません。redis でキーのより正確なダンプを取得するにはどうすればよいですか? ジョブを正しくクリアしていますか?