redis RQ -清空和删除队列

nsc4cvqm  于 2022-11-21  发布在  Redis
关注(0)|答案(8)|浏览(661)

我正在使用RQ,我有一个failed队列,其中有数千个项目,还有一个test队列,我在不久前为测试而创建,现在是空的和未使用的。我想知道如何从failed队列中删除所有作业,并完全删除test队列?
很抱歉问这个基本问题,但是我在RQ docs中找不到相关信息,而且我对Redis和RQ都是全新的......提前感谢!

iq0todco

iq0todco1#

# 使用 rq 清除

RQ 提供 了 使 任何 队列 为 空 的 方法 :

>>> from redis import Redis
>>> from rq import Queue
>>> qfail = Queue("failed", connection=Redis())
>>> qfail.count
8
>>> qfail.empty()
8L
>>> qfail.count
0

中 的 每 一 个
如果 test 队列 仍然 存在 , 您 可以 对 它 执行 相同 的 操作 。

# 使用 rq-dashboard 进行 清理

安装 rq Jmeter 板 :

$ pip install rq-dashboard

格式
启动 它 :

$ rq-dashboard
RQ Dashboard, version 0.3.4
 * Running on http://0.0.0.0:9181/

格式
在 浏览 器 中 打开 。
选择 队列
点击 红色 按钮 " 清空 "
你 就 完 了 。

# Python 函数 清除 作业

如果 你 运行 的 Redis 版本 太 旧 , 在 RQ 使用 的 命令 上 失败 , 你 仍然 可以 通过 python 代码 成功 删除 作业 :
程式 码 会 取得 队列 的 名称 , 其中 是 工作 ID 。
使用 LPOP 时 , 我们 会 逐一 询问 工作 ID 。
将 前缀 ( 默认 情况 下 为 " rq : job : " ) 添加 到 作业 ID , 我们 就 有 了 一 个 键 , 其中 存储 了 作业 。
在 每个 键 上 使用 DEL , 我们 逐个 清除 数据 库 作业 。

>>> import redis
>>> r = redis.StrictRedis()
>>> qname = "rq:queue:failed"
>>> def purgeq(r, qname):
...   while True:
...     jid = r.lpop(qname)
...     if jid is None:
...         break
...     r.delete("rq:job:" + jid)
...     print(jid)
...
>>> purge(r, qname)
a0be3624-86c1-4dc4-bb2e-2043d2734b7b
3796c312-9b02-4a77-be89-249aa7325c25
ca65f2b8-044c-41b5-b5ac-cefd56699758
896f70a7-9a35-4f6b-b122-a08513022bc5

格式

91zkwejq

91zkwejq2#

- 2016年

现在可以使用rq的empty选项形成命令行:

/path/to/rq empty queue_name

因此,您可以使用它清空任何队列,而不仅仅是失败的队列

aelbi1ox

aelbi1ox3#

以上解决方案都不起作用失败队列未在队列下注册
因此我将所有失败的作业移到默认队列中,并使用
rq空队列名称--url [redis-url]

neekobn8

neekobn84#

监视工具rqinfo可以清空失败的队列。
只需确保您有一个活动的virtualenv,并安装了rq,然后运行
$ rqinfo --empty-failed-queue
有关详细信息,请参阅rqinfo --help

ckocjqey

ckocjqey5#

你可以登录到Redis清除所有队列
登录
用户@用户:~$redis-cli
输入以下命令并按Enter键

冲洗口

你就完成了
编辑:这将删除存储在redis中的所有内容

bvn4nwqk

bvn4nwqk6#

以下是使用django_rq清除失败作业注册表的方法:

import django_rq
from rq.registry import FailedJobRegistry

queue = django_rq.get_queue("your_queue_with_failed_jobs")
registry = FailedJobRegistry(queue=queue)

for job_id in registry.get_job_ids():
  registry.remove(job_id)
ykejflvf

ykejflvf7#

- 2022年-

我也在纠结这个问题,这是一段适合我的代码。
它循环遍历队列名称(在我的例子中是“default”和“low”),获取每个队列的所有失败作业并删除它们

import django_rq
from rq.registry import FailedJobRegistry
from redis import Redis
from rq.job import Job
from django.conf import settings
redis = Redis(host=settings.REDIS_HOST, port=settings.REDIS_PORT)
queues = ["default", "low"]
for q in queues:
    queue = django_rq.get_queue(q)
    registry = FailedJobRegistry(queue=queue)
    for job_id in registry.get_job_ids():
        job = Job.fetch(job_id, connection=redis)
        registry.remove(job)
kx1ctssn

kx1ctssn8#

默认情况下,'rq'作业的前缀为'rq:job'。因此,您可以使用以下命令从redis中删除这些作业:

redis-cli KEYS rq:job:* | xargs redis-cli DEL

相关问题