Обробка синхронізації процесів за допомогою Laravel Cache Lock

Перекладено ШІ 0 Laravel News 17 січня, 2025

У статті розглядається функціональність системи блокування кешу в Laravel, яка допомагає уникати конфліктів при обробці одночасних операцій. Дізнайтеся, як налаштувати розподілені блоки для захисту ваших процесів від умов гонки та забезпечення цілісності даних у вашій аплікації

Коли створюються додатки для обробки одночасних операцій, важливо забезпечити, щоб певні процеси не заважали один одному. Система блокування кешу в Laravel є надійним рішенням для управління синхронізацією процесів, незалежно від того, чи обробляєте ви завантаження, вебхуки чи фонові завдання.

Система блокування кешу дозволяє створювати розподілені блоки, тобто вони можуть працювати на різних серверах, у різних процесах і з черговими робітниками, що робить їх ідеальними для запобігання гонитві станів у розподілених системах.

use Illuminate\Support\Facades\Cache;

$lock = Cache::lock('process-payment', 120);

if ($lock->get()) {
    // Безпечно обробити платіж
    // Блокування автоматично знімається через 120 секунд
}

Ось практичний приклад обробки вебхуків із використанням блокувань:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cache;
use App\Jobs\ProcessWebhook;

class WebhookController extends Controller
{
    public function handle(Request $request)
    {
        $webhookId = $request->input('webhook_id');
        $lockName = "webhook-{$webhookId}";

        $lock = Cache::lock($lockName, 60);

        try {
            if (!$lock->get()) {
                Log::info("Webhook {$webhookId} вже обробляється");
                return response()->json([
                    'message' => 'Webhook обробляється'
                ], 409);
            }

            // Початкова валідація
            $this->validateWebhook($request);

            // Виклик обробної роботи з інформацією про блокування
            ProcessWebhook::dispatch(
                $request->all(),
                $lock->owner()
            )->onQueue('webhooks');

            return response()->json([
                'message' => 'Webhook прийнято для обробки',
                'processing_id' => $lock->owner()
            ]);

        } catch (Exception $e) {
            $lock?->release();
            throw $e;
        }
    }
}

class ProcessWebhook implements ShouldQueue
{
    public function __construct(
        private array $payload,
        private string $lockOwner
    ) {}

    public function handle()
    {
        $lock = Cache::restoreLock(
            "webhook-{$this->payload['webhook_id']}",
            $this->lockOwner
        );

        try {
            // Безпечно обробити вебхук, знаючи, що у нас є блокування
            $this->processWebhookPayload();

        } finally {
            // Завжди зняти блокування після завершення
            $lock->release();
        }
    }
}

Блокування кешу в Laravel забезпечують надійний спосіб обробки синхронізації процесів, гарантуючи, що ваша програма підтримує цілісність даних навіть під час роботи з одночасними операціями.

Популярні

Інше, що варто прочитати

10 Оновлено 01 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

19 Оновлено 01 червня, 2026

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

37 Оновлено 01 червня, 2026

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку