Керування одночасними запитами за допомогою Laravel Session Blocking

Перекладено ШІ 0 Laravel News 26 червня, 2026

Дізнайтеся, як Laravel session blocking запобігає race conditions та гарантує цілісність даних під час паралельних запитів. Розповідаємо, як за допомогою методу block надійно захистити обробку платежів від дублювання транзакцій.

Механізм session blocking у Laravel запобігає виникненню race conditions та помилок у даних, контролюючи паралельний доступ до сесій. Ця функція гарантує цілісність даних під час виконання одночасних операцій.

# Як працює session blocking

Для активації блокування сесій необхідно мати:

  • Cache driver із підтримкою атомарних блокувань (redis, memcached, dynamodb або database).
  • Session driver, відмінний від cookie.
Route::post('/endpoint', function() {
    // Логіка операції
})->block($lockSeconds = 5, $waitSeconds = 10);

# Практичне впровадження

Розглянемо реалізацію системи обробки платежів із контролем паралельних запитів:

<?php
 
namespace App\Http\Controllers;
 
use App\Models\Payment;
use Illuminate\Support\Facades\DB;
use App\Exceptions\PaymentException;
 
class PaymentController extends Controller
{
    public function process(Request $request)
    {
        return DB::transaction(function() use ($request) {
            // Перевірка, чи існує платіж і чи не був він уже оброблений
            $payment = Payment::findOrFail($request->payment_id);
 
            if ($payment->isProcessed()) {
                throw new PaymentException('Payment already processed');
            }
 
            // Обробка платежу
            $result = $this->paymentGateway->charge([
                'amount' => $payment->amount,
                'currency' => $payment->currency,
                'token' => $request->payment_token
            ]);
            $payment->markAsProcessed($result->transaction_id);
 
            return response()->json([
                'status' => 'success',
                'transaction_id' => $result->transaction_id
            ]);
        });
    }
}
 
// routes/api.php
Route::post('/payments/process', [PaymentController::class, 'process'])->block(5, 10);

Цей підхід забезпечує:

  • Захист від дублювання платежів.
  • Очікування до 10 секунд для отримання блокування.
  • Атомарність операцій завдяки database transactions.
  • Коректну обробку паралельних запитів.

Session blocking — це надійний інструмент для керування паралельними запитами. Він гарантує цілісність даних у високонавантажених застосунках, зберігаючи лаконічність і чистоту коду в стилі Laravel.

Популярні

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

57 Оновлено 26 червня, 2026

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу

91 Оновлено 26 червня, 2026

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?

11 Оновлено 26 червня, 2026

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

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