执行php artisan cache:clear后如何保留Laravel Horizon面板数据?
问题解决方案
一、执行php artisan cache:clear不清除Horizon数据
你的缓存与Horizon共用了同一个Redis数据库(REDIS_DATABASE=10),所以缓存清除操作会连带删除Horizon的监控数据。解决思路是给Horizon单独分配Redis连接:
在
config/database.php中新增Horizon专属Redis连接
在redis配置数组里添加:'horizon' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_HORIZON_DATABASE', 11), // 使用与缓存不同的数据库编号 'prefix' => env('REDIS_KEY', 'oqmm') . ':', ],修改Horizon配置使用新连接
打开config/horizon.php,找到use选项并修改:'use' => 'horizon',更新环境变量(可选)
在.env文件中新增:REDIS_HORIZON_DATABASE=11
完成后,php artisan cache:clear只会清除默认Redis数据库(10)的缓存,Horizon的数据存储在11库中,不会被影响。
二、切换到database队列后Horizon面板无数据
Horizon默认仅监控Redis队列,要支持database队列,需在Horizon配置中添加对应supervisor:
更新Horizon的supervisor配置
在config/horizon.php的environments.local数组里新增一个supervisor:'local' => [ 'supervisor-1' => [ 'connection' => 'redis', 'queue' => ['default'], 'balance' => 'auto', 'processes' => 3, 'tries' => 3, ], 'supervisor-db' => [ // 新增database队列的supervisor配置 'connection' => 'database', 'queue' => ['default'], 'balance' => 'simple', 'processes' => 2, 'tries' => 3, ], ],确保database队列的表已生成
若未创建队列相关数据表,执行以下命令:php artisan queue:table php artisan queue:failed-table php artisan migrate重启Horizon进程
先终止现有Horizon进程:php artisan horizon:terminate再重新启动Horizon:
php artisan horizon
提交database队列任务后,Horizon面板即可显示对应数据。
三、其他队列GUI工具
如果Horizon不符合需求,可选择以下工具:
- Laravel Telescope:Laravel官方调试工具,内置队列监控功能,支持查看任务状态、执行日志、失败原因,兼容所有队列连接类型。安装命令:
composer require laravel/telescope --dev,随后发布配置:php artisan telescope:install。 - Queue Monitor:第三方包(
laravel-queue-monitor),专注队列监控,提供任务列表、执行统计、失败重试按钮,支持多种队列驱动。 - Supervisor Web UI:若用Supervisor管理队列进程,可通过supervisor-web类工具查看进程运行状态,适合监控进程存活情况,但不提供任务级详情。
内容的提问来源于stack exchange,提问作者objg
相关产品推荐
相关产品推荐

