Laravel 失败的任务存储到 Redis

10

我正在尝试配置我的Laravel应用程序,使所有的Laravel队列失败作业都进入Redis而不是mysql。

目前我的作业已经配置为使用redis,但是failed_jobs仍然进入了MySql数据库。

在StackOverflow/Laravel上没有找到任何相关资料

Laravel 5.4

Redis

PHP 7.0

请帮忙解决!

3个回答

0
我认为你对Redis的使用方式有误。你应该将失败的任务存储在正确的数据库中,比如PostgreSQL或MySQL。Laravel只是将Redis用作队列的“代理”,因为Redis具有内置的队列数据结构,并且可以以最小的努力和高性能处理队列。考虑将失败的任务和结果存储在一个单独的数据库中,以便以后进行检查。

对于一个大型的作业处理,我们需要监控大量失败的作业,Redis可以有效地完成这项工作,但是MySQL有连接限制,因此会崩溃。当时,我发表了一个问题,5年8个月前,我没有找到任何解决方案。 - Ali Zain

-1

要将Laravel配置为将失败的作业存储在Redis而不是MySQL中,您需要在Laravel应用程序中进行一些更改。

  1. 更新失败的作业数据库连接:默认情况下,Laravel将失败的作业存储在您的.env文件中指定的数据库连接中。要更改此设置,请打开config/queue.php文件并找到failed配置数组。将database键更新为使用Redis连接。例如:
'failed' => [
    'database' => 'redis', // Update this to use the Redis connection
],
在Redis中创建失败的作业表:即使您使用Redis,Laravel也需要一个表来存储失败的作业。要在Redis中创建此表,请在终端中运行以下命令:
php artisan queue:failed-table

这个命令将为失败的作业表创建一个迁移文件。现在,运行迁移以在Redis中创建表格。
php artisan migrate
  • 更新队列工作器配置:默认情况下,Laravel的队列工作器将使用database连接来处理失败的作业。要更改此设置,请再次打开config/queue.php文件,并找到connections数组。将redis连接更新为包含failed配置。例如:
  • 'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
        'failed' => [
            'database' => 'redis', // Update this to use the Redis connection
        ],
    ],
    

    4. 重新启动队列工作进程:在进行这些更改后,重新启动队列工作进程以应用新的配置。在终端中运行以下命令:
    php artisan queue:restart
    

    现在,当作业失败时,它将被存储在Redis数据库中,而不是MySQL。
    注意:请确保在您的Laravel应用程序中安装并正确配置了Redis驱动程序。您可以检查config/database.php文件以确保Redis配置正确。
    希望这对您有所帮助!

    https://meta.stackoverflow.com/q/421831/11107541 - undefined

    -2
    检查你的设置在config/queue.php中,你应该找到以下值:
    'failed' => [
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => env('QUEUE_FAILED_TABLE', 'failed_jobs'),
    ]
    

    根据需要更改连接和表。


    我认为Laravel的Redis驱动程序没有配置来存储失败的作业信息。我使用PostgreSQL,它运行良好。我还尝试更改配置并在Redis中查找失败的作业信息,但没有成功。所以我认为没有办法将失败的作业存储在键值存储中。这需要关系型数据库和表,配置文件的值也指向了这一点。而且如果想一想,为什么我们要把失败的作业放到Redis中呢?我只会继续使用PostgreSQL... - Alexander Znaydyuk
    应该通过将其更改为Redis来使其工作。还可以参考https://dev59.com/jprga4cB1Zd3GeqPrb5k - rhand
    这个答案与rhand在评论中链接的答案完全相同,都是错误的。 - jonlink

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接