Pessimistic Locking Laravel dengan refreshForUpdate() Menjaga Konsistensi Data

Pessimistic locking berguna ketika dua request dapat membaca dan mengubah record yang sama. Laravel memperkenalkan refreshForUpdate() untuk membantu mengambil ulang model sekaligus meminta lock pada transaksi database. Pola ini relevan untuk stok, saldo, booking, dan counter yang tidak boleh mengalami lost update.

Contoh implementasi

DB::transaction(function () use ($orderId) {
  $order = Order::findOrFail($orderId);
  $order->refreshForUpdate();

  if ($order->status !== "pending") {
    throw new DomainException("Order sudah diproses");
  }
  $order->update(["status" => "paid"]);
});

Catatan developer

Teknologi ini sebaiknya diuji pada workload nyata, bukan hanya benchmark. Periksa kompatibilitas dependency, biaya, latency, observability, privasi data, dan strategi rollback sebelum dipakai di production.

Kesimpulan

Pembaruan ini membuka peluang baru, tetapi hasil akhirnya tetap bergantung pada desain aplikasi, pengujian, dan keputusan engineering yang bertanggung jawab.

Sumber asli:

https://laravel-news.com/laravel-refresh-for-update

Transparansi: Artikel ini disusun bersama Codekop AI berdasarkan sumber yang tercantum, kemudian ditinjau dan disunting oleh Fauzan Falah. AI dapat keliru, jadi silakan cek kembali sumber asli.
Komentar