horizon任务不显示在phpmyadmin的jobs表里,因为它默认使用redis而非数据库队列驱动;其任务元数据(如pending、failed等)均存储于redis的hash、sorted set等结构中,需通过horizon web界面或redis-cli查询,phpmyadmin无法访问redis数据。

Horizon任务不显示在phpMyAdmin的jobs表里?
因为Laravel Horizon默认不走数据库队列驱动,它用的是Redis。你在phpMyAdmin里翻 jobs、failed_jobs 表,基本看不到Horizon管理的任务——那些表只对 database 队列驱动生效。
想查Horizon任务状态,得去Redis里看,不是MySQL里。
怎么确认Horizon当前用的是Redis?
检查你的 .env 文件和 config/queue.php:
-
QUEUE_CONNECTION=redis(或HORIZON_CONNECTION=redis) -
'horizon' => ['driver' => 'redis', ...]在queue.connections配置中
如果配置的是 redis,那所有 Horizon 任务元数据(如 pending、completed、failed 的计数、任务负载、延迟时间)都存在 Redis 的 Hash、Sorted Set 和 List 结构里,比如:horizon:supervisor:*、horizon:metrics:jobs、horizon:recent:failed。
在phpMyAdmin里“间接”查Horizon任务的唯一可行路径
只有当你主动把任务日志落地到数据库时,才能在 phpMyAdmin 里看到部分内容。例如:
- 监听
Illuminate\Queue\Events\JobProcessed或JobFailed事件,手动写入自定义表(如horizon_job_logs) - 用
DB::table('horizon_job_logs')->insert(...)记录$event->job->getName()、$event->job->getRawBody()、状态、耗时等 - 注意:这不会反映实时队列状态(比如正在处理中的任务数),只是事后记录
别指望靠改 QUEUE_CONNECTION=database 来“让Horizon用MySQL”——Horizon 不支持 database 驱动,强行切换会导致 HorizonCommand 启动失败,报错类似:Driver [database] not supported for Horizon。
真正该用什么工具查Horizon实时状态?
直接访问 Horizon Web 界面(通常是 /horizon,需配置中间件和权限),它背后调用的是 Redis 数据,能实时显示:
- Supervisors 运行状态与进程数
- Pending / Active / Completed / Failed 任务卡片及趋势图
- 点击某条 failed 任务可查看完整异常堆栈、原始 payload 和失败时间
如果服务器没开Web访问,就用 redis-cli 手动查,例如:
redis-cli KEYS "horizon:metrics:jobs:*"或
redis-cli HGETALL "horizon:supervisor:my-app:*。phpMyAdmin 对这件事完全无能为力——它连 Redis 都连不上。
别在 MySQL 里找 Redis 的数据,这是最常被忽略的前提。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











