Rumah > pangkalan data > Redis > Penjelasan terperinci tentang kawalan konkurensi bagi transaksi yang diedarkan yang dilaksanakan oleh Redis

Penjelasan terperinci tentang kawalan konkurensi bagi transaksi yang diedarkan yang dilaksanakan oleh Redis

WBOY
Lepaskan: 2023-06-21 14:05:13
asal
2113 orang telah melayarinya

Dengan pembangunan aplikasi Internet, sistem yang diedarkan telah menjadi trend yang tidak dapat dielakkan. Dalam sistem teragih, interaksi data diperlukan antara berbilang perkhidmatan, dan interaksi data ini boleh dilihat sebagai satu siri transaksi. Apabila berbilang perkhidmatan beroperasi pada urus niaga pada masa yang sama, kawalan serentak diperlukan.

Redis ialah pangkalan data nilai kunci berprestasi tinggi yang digunakan secara meluas dalam sistem teragih. Ia menyokong pelbagai struktur dan arahan data, termasuk urus niaga dan pemantauan, menjadikannya pilihan yang baik untuk kawalan serentak dalam sistem yang diedarkan. Artikel ini akan memperkenalkan secara terperinci cara Redis melaksanakan kawalan serentak bagi transaksi yang diedarkan.

1. Transaksi Redis

Transaksi Redis ialah urutan operasi atom. Operasi ini boleh dibungkus ke dalam satu arahan dan dihantar ke pelayan Redis untuk dilaksanakan dalam langkah berasingan, yang menjamin keatomisan transaksi. Dalam transaksi Redis, anda boleh menggunakan perintah MULTI untuk memulakan transaksi, perintah EXEC untuk menyerahkan transaksi dan perintah DISCARD untuk membatalkan transaksi.

Arahan dalam transaksi Redis boleh dilaksanakan secara berterusan selepas memulakan transaksi tanpa menghantar permintaan untuk setiap arahan. Selepas klien telah melaksanakan semua arahan, ia boleh menggunakan perintah EXEC untuk menyerahkan arahan kepada pelayan Redis dalam kelompok. Jika sebarang ralat berlaku semasa pelaksanaan transaksi, Redis akan membatalkan transaksi dan melarang semua pengubahsuaian. Ini memastikan bahawa semua operasi dalam transaksi dilaksanakan atau tiada yang dilaksanakan.

2. Pemantauan Redis

Pemantauan Redis ialah kunci kepada Redis merealisasikan transaksi yang diedarkan. Ia menggunakan arahan WATCH untuk memantau satu atau lebih kunci dalam pangkalan data. Dalam jenis data seperti LIST, SET, ZSET, HASH dan STRING, kunci yang dipantau mesti wujud. Jika pengubahsuaian kepada kunci ini berlaku semasa pemantauan, transaksi tidak akan berjaya dilakukan. Semasa pemantauan, pelanggan boleh menggunakan arahan MULTI untuk memulakan transaksi lain.

Sebagai contoh, kod berikut menggunakan pemantauan Redis:

WATCH balance
balance = GET balance
balance = balance - 10
MULTI
SET balance $balance
EXEC
Salin selepas log masuk

Kod ini akan memantau kunci bernama "baki", gunakan arahan GET untuk mendapatkan data daripada kunci ini, dan kemudian memindahkan data Tolak 10. Kemudian gunakan arahan MULTI untuk memulakan transaksi dan tulis semula data kepada "baki".

Jika pelanggan lain dalam transaksi ini turut memantau kekunci "baki" dan mengubah suai kunci ini sebelum pelanggan melaksanakan arahan MULTI, maka transaksi akan gagal. Jika transaksi berjaya diserahkan, pelanggan lain tidak boleh mengubah suai kunci yang dipantau sebelum semua operasi yang disertakan dalam transaksi dilakukan dalam pelayan Redis.

3. Kunci edar Redis

Untuk mengelakkan masalah persaingan dan kebuntuan yang disebabkan oleh memanggil arahan pemantauan Redis pada berbilang pelanggan pada masa yang sama, kunci yang diedarkan boleh digunakan. Redis menyediakan dua jenis kunci teragih: kunci berdiri sendiri dan kunci kelompok.

1. Kunci bersendirian

Kunci bersendirian ialah pelaksanaan kunci teragih yang paling mudah. Dalam kunci yang berdiri sendiri, anda boleh menggunakan arahan SETNX untuk menetapkan nilai kunci untuk mengunci. Contohnya, kod berikut menggunakan kunci yang berdiri sendiri:

SETNX lock_key $current_time
Salin selepas log masuk

Kod ini menetapkan nilai kepada "kunci_kunci". Jika kunci ini tidak wujud sebelum ini, tetapan berjaya dan 1 dikembalikan. Jika tidak, 0 dikembalikan, menunjukkan bahawa kunci gagal. Semasa tempoh kunci, pelanggan lain tidak boleh mengubah suai kunci ini Pada masa ini, pelanggan boleh melakukan operasinya sendiri. Apabila pelanggan menyelesaikan operasi, ia perlu menggunakan arahan DEL untuk melepaskan kunci. Ini akan memadamkan "kunci_kunci" dan membuka kuncinya.

2. Kunci kluster

Kunci kluster ialah pelaksanaan kunci teragih yang lebih berkuasa. Dalam kunci kelompok, algoritma Redlock boleh digunakan untuk penguncian berbilang nod. Algoritma Redlock ialah algoritma kunci teragih berdasarkan penyegerakan jam. Dalam algoritma Redlock, pelanggan mula-mula memperoleh kunci dan menggunakan masa semasa sebagai masa tamat tempoh kunci. Pelanggan juga perlu mendapatkan kunci daripada pelayan Redis lain untuk memastikan kunci ini konsisten merentas berbilang nod. Semasa tempoh kunci, pelanggan boleh melakukan operasi mereka sendiri. Apabila pelanggan menyelesaikan operasi, kunci perlu dilepaskan. Ini akan mengeluarkan kunci dan mengeluarkan kunci pada semua pelayan Redis pada masa yang sama.

4. Ringkasan

Dalam pembangunan aplikasi Internet, urus niaga teragih dan kawalan serentak adalah sangat penting. Redis menyediakan mekanisme seperti urus niaga, pemantauan dan kunci yang diedarkan, menjadikannya pilihan yang baik untuk kawalan serentak dalam sistem yang diedarkan. Kemahiran dalam mekanisme ini boleh membantu pembangun mereka bentuk dan membangunkan sistem teragih dengan lebih baik, serta menyelesaikan isu kawalan transaksi dan konkurensi yang diedarkan.

Atas ialah kandungan terperinci Penjelasan terperinci tentang kawalan konkurensi bagi transaksi yang diedarkan yang dilaksanakan oleh Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan