问题:如果作业的结果立即丢弃,为什么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 / django-rq 中设置另一个参数以防止 redis 被填满?
更新:
在这篇文章之后,我预计内存可能会因为 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 中的键?我是否正确清除作业?