0Pricing
Lua Academy · Pelajaran

Operasi Atomik dan Transaksi

Gunakan skrip Lua untuk menjalankan operasi Redis atomik dalam beberapa langkah.

Operasi Atomik dan Transaksi adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Mengapa Operasi Bertahap Harus Atomik?

Banyak kasus penggunaan Redis memerlukan pembacaan dan penulisan beberapa kunci dalam satu operasi yang konsisten. Tanpa keatomikan, kondisi balapan dapat merusak keadaan.

Kondisi Balapan Baca-Ubah-Tulis

Tanpa Lua: GET penghitung → ubah di klien → SET penghitung. Dua klien dapat membaca nilai yang sama, sama-sama mengubahnya, lalu SET kedua menimpa perubahan yang pertama.

Perbaikan dengan Skrip Lua

Dengan Lua di Redis, proses baca-ubah-tulis berlangsung secara atomik di dalam server.

EVAL "
local val = redis.call('GET', KEYS[1])
val = tonumber(val) or 0
val = val + tonumber(ARGV[1])
redis.call('SET', KEYS[1], val)
return val
" 1 counter 5

Bandingkan dan Tukar

Terapkan CAS (bandingkan dan tukar) secara atomik — hanya perbarui jika nilai saat ini sama dengan nilai yang diharapkan.

EVAL "
local cur = redis.call('GET', KEYS[1])
if cur == ARGV[1] then
  redis.call('SET', KEYS[1], ARGV[2])
  return 1
end
return 0
" 1 mykey expected newvalue

Kunci Terdistribusi

Dapatkan kunci secara atomik: SET kunci nilai NX EX detik. Inilah pola yang aman — padanan Lua-nya.

EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
  return 1
end
return 0
" 1 lock:resource "owner-uuid" 30

Melepaskan Kunci dengan Aman

Hanya lepaskan kunci jika Anda adalah pemiliknya. Hal ini mencegah klien lain melepaskan kunci milik orang lain.

EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
  return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"

Transaksi Multi-Kunci

Skrip Lua dapat beroperasi pada beberapa kunci secara atomik — sesuatu yang tidak dapat dijamin oleh MULTI/EXEC (operasi tersebut dapat gagal di tengah jalan sehingga meninggalkan keadaan parsial).

MULTI/EXEC vs Lua

MULTI/EXEC memasukkan perintah ke antrean untuk eksekusi secara berkelompok, tetapi tidak benar-benar atomik terkait nilai yang dibaca (watch/unwatch menambah kerumitan). Skrip Lua lebih sederhana dan sepenuhnya atomik.

Mengembalikan Perubahan dalam Lua

Redis Lua tidak mendukung transaksi dengan pengembalian. Jika terjadi kesalahan di tengah jalan, perintah redis.call yang sudah dijalankan sebelumnya tidak dibatalkan. Rancang skrip agar aman dengan memeriksa prasyarat terlebih dahulu.

Batas Ukuran Skrip

Skrip harus kecil dan cepat. Logika kompleks sebaiknya berada di lapisan aplikasi, bukan di Redis. Gunakan Lua hanya untuk bagian yang harus atomik.

Menguji Keatomikan

Uji kondisi balapan dengan klien Redis secara bersamaan. Verifikasi bahwa skrip Lua mempertahankan keadaan yang benar dalam kondisi konkurensi tinggi menggunakan alat pembandingan kinerja Redis.

Pertanyaan tentang Operasi Atomik

Mengapa proses baca-ubah-tulis dalam skrip Lua Redis lebih aman daripada melakukannya dalam kode aplikasi?

Ringkasan: Operasi Atomik dan Transaksi

Gunakan skrip Lua Redis untuk proses baca-ubah-tulis atomik, CAS, dan penguncian terdistribusi. Skrip Lua lebih sederhana dan lebih tepat daripada MULTI/EXEC untuk operasi yang bergantung pada nilai yang dibaca. Buat skrip tetap minimal dan uji dalam kondisi konkurensi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Operasi Atomik dan Transaksi” gratis?

Ya — teks lengkap “Operasi Atomik dan Transaksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Operasi Atomik dan Transaksi”?

Gunakan skrip Lua untuk menjalankan operasi Redis atomik dalam beberapa langkah. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Operasi Atomik dan Transaksi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. EVAL dan Lingkungan Lua Redis
  2. Operasi Atomik dan Transaksi
  3. Pembatasan Laju dengan Lua
  4. SCRIPT LOAD dan EVALSHA
← Kembali ke Lua Academy