Traitement de Données en Masse: Gérer la Charge avec Redis et les Files d'Attente

Évitez les erreurs HTTP 504 (Gateway Timeout) en déportant les traitements de fichiers Excel/CSV lourds vers des workers d'arrière-plan avec Redis.

Akram Hafaiedh
Akram Hafaiedh
Développeur Full Stack
2026-01-054 min de lecture
// SYSTEM ARCHITECTURE PATTERN
PRODUCTION VERIFIED
TECHNICAL CASE STUDY

Traitement de Données en Masse: Gérer la Charge avec Redis et les Files d'Attente

LARAVELREDISMULTI-TENANT

Traitements en Arrière-plan avec Redis et Queues

L'importation de fichiers Excel ou CSV volumineux (plus de 10 000 lignes) au sein d'une simple requête HTTP classique est une erreur fréquente qui mène inévitablement à des erreurs HTTP 504 de dépassement de délai (Gateway Timeout). Voyons comment architecturer un pipeline d'importation asynchrone et résilient avec Redis et les Files d'Attente Laravel.


L'Architecture du Pipeline Asynchrone

1. Téléchargement : L'utilisateur soumet le fichier Excel.

2. Mise en File d'Attente : Le fichier est stocké, et un Job d'importation est poussé dans la file d'attente Redis. Le serveur renvoie immédiatement un statut HTTP 200.

3. Traitement en Arrière-Plan : Un worker récupère le Job en file, lit le fichier par morceaux (chunks) et écrit en base.

4. Notification en Temps Réel : L'utilisateur suit l'avancement de l'import via des WebSockets.


1. Enregistrement du Fichier et Dispatch du Job

Plutôt que d'exécuter la lecture du fichier de manière synchrone, nous déléguons la tâche :

php
class=class="text-emerald-500 dark:text-emerald-400 font-medium">"text-slate-500 italic">// app/Http/Controllers/ImportController.php
namespace AppHttpControllers;

use AppJobsProcessExcelImport;
use IlluminateHttpRequest;

class ImportController extends Controller
{
    public function upload(Request $request)
    {
        $request->validate(['file' => 'required|mimes:xlsx,csv']);
        
        class=class="text-emerald-500 dark:text-emerald-400 font-medium">"text-slate-500 italic">// Enregistre le fichier temporairement
        $path = $request->file('file')->store('imports');

        class=class="text-emerald-500 dark:text-emerald-400 font-medium">"text-slate-500 italic">// Lance le Job en arrière-plan sur Redis
        ProcessExcelImport::dispatch($path, auth()->user()->id);

        return response()->json([
            'message' => 'Upload effectué avec succès. Traitement en cours en arrière-plan.',
        ]);
    }
}

2. Découpage en Morceaux (Chunks) du Job

Dans le Job, nous lisons les données par paquets de 500 lignes pour éviter la saturation de la mémoire PHP et les coupures serveurs.

php
class=class="text-emerald-500 dark:text-emerald-400 font-medium">"text-slate-500 italic">// app/Jobs/ProcessExcelImport.php
namespace AppJobs;

use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use MaatwebsiteExcelFacadesExcel;

class ProcessExcelImport implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $filePath;
    protected $userId;

    public function __construct($filePath, $userId)
    {
        $this->filePath = $filePath;
        $this->userId = $userId;
    }

    public function handle()
    {
        class=class="text-emerald-500 dark:text-emerald-400 font-medium">"text-slate-500 italic">// Importation par paquets pour préserver la mémoire
        Excel::import(new InventoryImport($this->userId), $this->filePath);
    }
}

L'utilisation de Redis comme courtier de messages combiné à des files d'attente maintient votre application ultra-réactive et résistante face aux montées en charge.

Engineering Collaboration

Building a High-Scale SaaS or Complex System?

Let’s discuss your architecture, full-stack development, or system modernization needs.

Articles Similaires

// SYSTEM ARCHITECTURE PATTERN
PRODUCTION VERIFIED
TECHNICAL CASE STUDY

Architecture WebSockets en Temps Réel : Intégrer Laravel Echo et Redis pour la Synchronisation de Stocks

LARAVELREDISMULTI-TENANT
Architecture
2026-03-20•Architecture

Architecture WebSockets en Temps Réel : Intégrer Laravel Echo et Redis pour la Synchronisation de Stocks

Read Article
// BACKEND & PIPELINE ENGINEERING
PRODUCTION VERIFIED
TECHNICAL CASE STUDY

Concevoir un Moteur de Facturation : Synchronisation API et Outils d'Administration

PHP 8.3QUEUESPARALLEL WORKERS
Backend
2026-02-26•Backend

Concevoir un Moteur de Facturation : Synchronisation API et Outils d'Administration

Read Article