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

已完成Silenced任务未按Horizon配置自动清理的问题求助

问题求助:Laravel Horizon中Silenced任务未按配置清理,长期占用Redis空间

我每小时会产生约7000个实现了Silenced接口的任务,这些任务均能正常运行并完成。按照Horizon的配置,已完成任务应在1小时后自动清理,但这类Silenced任务却在Redis中留存7天,占用大量存储空间,特此寻求解决办法。

Horizon 配置

/*
    |--------------------------------------------------------------------------
    | Job Trimming Times
    |--------------------------------------------------------------------------
    |
    | Here you can configure for how long (in minutes) you desire Horizon to
    | persist the recent and failed jobs. Typically, recent jobs are kept
    | for one hour while all failed jobs are stored for an entire week.
    |
    */

    'trim' => [
        'recent' => 60,
        'pending' => 60,
        'completed' => 60,
        'recent_failed' => 10080,
        'failed' => 10080,
        'monitored' => 10080,
    ],

任务代码

class ClearCategorySkusJob implements ShouldBeUnique, ShouldQueue, Silenced {
    use Dispatchable, Queueable;

    public int $tries = 3;

    public function __construct(
        private readonly string $category,
        private readonly string $domain,
    ) {
        $this->onQueue('cache');
    }

    public function handle(): void {}
    
    public function uniqueId(): string {}

    public function tags(): array {}

}

环境版本

  • PHP版本:8.2.26
  • Redis版本:6.2.13
  • Laravel版本:10.48.24
  • Horizon版本:5.24.3

解决思路与方案

1. 确认Silenced任务的存储分类

Silenced接口会让任务跳过Horizon的常规统计记录,但这类任务可能被归类到了monitored或其他保留周期更长的集合中。可以通过Redis客户端查看Horizon相关的键(比如horizon:jobs:monitored),确认任务存储位置后,对应调整该分类的修剪时间。

2. 自定义任务修剪逻辑

可以在任务的handle方法执行完毕后,手动触发清理逻辑;或者扩展Horizon的修剪命令,针对Silenced任务单独处理,确保任务完成后被及时清理。

3. 升级Horizon版本

当前使用的Horizon 5.24.3可能存在Silenced任务修剪的bug,建议升级到最新稳定版本,查看官方更新日志确认是否有相关修复。

4. 强制定时修剪

临时解决方案可通过定时任务每小时执行一次Horizon修剪命令,强制清理过期任务:

php artisan horizon:trim

将该命令加入Laravel调度(app/Console/Kernel.php):

protected function schedule(Schedule $schedule)
{
    $schedule->command('horizon:trim')->hourly();
}

5. 检查队列专属配置

确认cache队列是否在Horizon的environments配置段中被单独设置了特殊的保留时间,若有则调整为符合需求的时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:54:54