确认 Redis 高可用方案是否生效。可以使用 Redis 命令行客户端查看 Redis 的主从节点信息。
确认 Laravel Horizon 配置中 Redis 的连接信息是否正确。在配置文件 config/horizon.php 中修改以下选项为适合你的 Redis 配置:
config/horizon.php
'redis' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DB', 0), 'options' => [ 'prefix' => env('REDIS_PREFIX', env('APP_NAME', 'laravel').':horizon:'), ], ],
在高可用环境下,Redis 主从节点的写入同步可能存在一定延迟。如果 Redis 主节点在接受任务时出现故障,Laravel Horizon 可能会将任务的状态标记为失败。可通过 retry_after 选项设置任务的重试时间,确保任务在 Redis 主节点恢复后被重新执行。修改 config/horizon.php 中以下选项:
retry_after
'defaults' => [ 'retry_after' => 90, // 重试时间,单位为秒 'timeout' => 60, 'tries' => 3, ],
如无特殊需求,建议在 Redis 中启用 maxmemory 和 maxmemory-policy 限制 Redis 内存使用。在 redis.conf 文件中添加以下内容即可:
maxmemory
maxmemory-policy
redis.conf
maxmemory 4GB maxmemory-policy allkeys-lru
其中 maxmemory 表示 Redis 使用的最大内存大小,需要根据实际情况进行调整。maxmemory-policy 表示 Redis 内存达到最大限制时采取的策略,建议使用 allkeys-lru 策略。
allkeys-lru