可以使用以下代码进行解决。
- 首先在项目的
.env
文件中设置 Redis 的最大内存限制:
REDIS_MAX_MEMORY=1024mb
- 然后在 Laravel 的配置文件
config/database.php
中配置 Redis 的连接信息,并设置 options
选项中的 prefix
和 serializer
选项:
'redis' => [
'client' => 'predis',
'options' => [
'prefix' => env('REDIS_PREFIX', 'laravel:'),
'serializer' => 'igbinary'
],
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 60,
],
],
- 在
config/horizon.php
配置文件中,修改 Redis 的 connection
参数,并添加 maxAttempts
和 retryAfter
参数:
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis_production',
'queue' => ['default'],
'balance' => 'simple',
'processes' => 10,
'tries' => 3,
'timeout' => 60,
'sleep' => 5,
'maxJobsProcessed' => 50,
'maxAttempts' => 5,
'retryAfter' => 60,
],
],
],
'connections' => [
'redis_production' => [
'url' => env('REDIS_URL'),
'options' => [
'prefix' => env('REDIS_PREFIX', 'laravel:'),
'serializer' => 'igbinary',
],
'max_concurrency' => 10,
'timeout' => 10.0,
],
],
通过以上步骤,可以限制 Redis 内存的使用量,并设置 Horizon 处理作业的重试