You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动Redis broker后出现僵尸Django Q集群,如何彻底清除?

问题原因

Django Q的集群存活状态完全依赖Redis中存储的注册信息,你遇到的僵尸集群本质是旧的qcluster进程异常退出时,没有向Redis发送删除自身注册记录的指令,导致Redis中一直残留该集群的元数据,只要Redis服务运行,qinfo就会读取到这条残留记录并将其识别为运行中集群。

清理步骤
  • 首先确认当前没有正在运行的qcluster进程,以及无需要保留的待执行/运行中任务。
  • 连接到你的Redis实例,删除Django Q存储的集群注册键:
# 默认无密码、端口6379的本地Redis执行这条
redis-cli DEL django-q:clusters

# 有自定义配置的话替换对应参数,示例:
# redis-cli -p 自定义端口 -a 密码 -n 库号 DEL django-q:clusters
  • 如果需要清空所有Django Q相关残留数据(包括待处理任务、失败任务记录等),执行以下命令:
# Redis 4.0以下版本
redis-cli KEYS "django-q:*" | xargs redis-cli DEL

# Redis 4.0+ 推荐用UNLINK避免阻塞主进程
redis-cli KEYS "django-q:*" | xargs redis-cli UNLINK
  • 验证清理结果:运行python manage.py qinfo,此时僵尸集群已经消失。后续正常启动python manage.py qcluster只会显示一个活跃集群。
后续预防方案
  • 终止qcluster进程时不要使用kill -9强制杀死,优先用Ctrl+C或者kill <进程PID>的方式,正常退出的qcluster会主动删除Redis中的自身注册信息
  • 在Django配置文件中添加cluster_timeout参数,自动剔除超时无心跳的集群记录,示例配置:
Q_CLUSTER = {
    # 保持你原有配置不变,新增以下参数
    'cluster_timeout': 30,  # 单位为秒,30秒无心跳的集群会被自动判定为失效
}

如果你在Django Q配置中自定义了Redis的键前缀,需要将上述命令中的django-q:替换为你自己设置的前缀。

内容的提问来源于stack exchange,提问作者lorenc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:54:03