Lua Academy · Pelajaran

Operasi Atom dan Transaksi

Gunakan skrip Lua untuk melaksanakan operasi Redis atom berbilang langkah.

Pelajaran 2 daripada 413 langkah

Operasi Atom dan Transaksi ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Mengapa Operasi Atomik Berbilang Langkah?

Banyak kes penggunaan Redis memerlukan pembacaan dan penulisan berbilang kunci dalam satu operasi yang konsisten. Tanpa keatomikan, keadaan perlumbaan boleh merosakkan keadaan data.

Keadaan Perlumbaan Baca-Ubah-Tulis

Tanpa Lua: GET counter → ubah dalam klien → SET counter. Dua klien boleh membaca nilai yang sama, kedua-duanya mengubahnya, kemudian SET yang kedua menulis ganti perubahan yang pertama.

Penyelesaian dengan Skrip Lua

Dengan Lua dalam Redis, operasi baca-ubah-tulis berlaku secara atomik di dalam pelayan.

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

Banding dan Tukar

Laksanakan CAS (banding dan tukar) secara atomik — hanya kemas kini jika nilai semasa sama dengan nilai yang dijangka.

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 Teragih

Dapatkan kunci secara atomik: SET kunci nilai NX EX saat. Ini ialah corak yang selamat — bersamaan dengan Lua.

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 Selamat

Hanya lepaskan kunci jika anda ialah pemiliknya. Ini menghalang klien lain daripada 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 Berbilang Kunci

Skrip Lua boleh beroperasi pada berbilang kunci secara atomik — sesuatu yang tidak dapat dijamin oleh MULTI/EXEC (ia boleh gagal di tengah jalan dan meninggalkan keadaan separa).

MULTI/EXEC berbanding Lua

MULTI/EXEC memasukkan arahan ke dalam baris gilir untuk pelaksanaan secara kelompok, tetapi tidak benar-benar atomik berkenaan nilai yang dibaca (watch/unwatch menambahkan kerumitan). Skrip Lua lebih mudah dan sepenuhnya atomik.

Melancarkan Balik dalam Lua

Lua Redis tidak menyokong transaksi dengan pelancaran balik. Jika ralat berlaku di tengah jalan, arahan redis.call yang telah dilaksanakan sebelum itu tidak dibalikkan. Reka bentuk skrip hendaklah selamat dengan menyemak prasyarat terlebih dahulu.

Had Saiz Skrip

Skrip hendaklah kecil dan pantas. Logik yang kompleks sepatutnya berada pada lapisan aplikasi, bukan dalam Redis. Gunakan Lua hanya untuk bahagian atomik.

Menguji Keatomikan

Uji keadaan perlumbaan dengan klien Redis serentak. Sahkan bahawa skrip Lua mengekalkan keadaan yang betul di bawah keserentakan tinggi menggunakan alat penanda aras Redis.

Soalan Operasi Atomik

Mengapakah operasi baca-ubah-tulis dalam skrip Lua Redis lebih selamat berbanding melakukannya dalam kod aplikasi?

Imbas Kembali: Operasi Atomik dan Transaksi

Gunakan skrip Lua Redis untuk operasi baca-ubah-tulis atomik, CAS dan penguncian teragih. Skrip Lua lebih mudah dan lebih tepat berbanding MULTI/EXEC untuk operasi yang bergantung pada nilai yang dibaca. Pastikan skrip ringkas dan uji di bawah keserentakan.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Operasi Atom dan Transaksi” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Operasi Atom dan Transaksi”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Operasi Atom dan Transaksi”?

Gunakan skrip Lua untuk melaksanakan operasi Redis atom berbilang langkah. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Operasi Atom dan Transaksi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. EVAL dan Persekitaran Lua Redis
  2. Operasi Atom dan Transaksi
  3. Pengehadan Kadar dengan Lua
  4. SCRIPT LOAD dan EVALSHA
← Kembali ke Lua Academy