Bagaimana untuk melaksanakan Kunci Teragih menggunakan Redis
Saya Bodoh
Nah, setiap kali kami bekerja dalam sistem tempatan kami, semuanya berfungsi sebagai mentega. Itulah sebabnya kami memanggil "Tiada tempat yang lebih baik daripada 127.0.0.1" tetapi BANGUNLAH KENYATAAN
Nah perkara tidak selalu berfungsi dalam pengeluaran seperti yang diharapkan. Selalunya apabila anda menjalankan berbilang kejadian aplikasi anda.
? Seperti yang anda lihat bahawa jika berbilang contoh aplikasi kami sedang berjalan dan katakan pelanggan kami membuat permintaan untuk menandakan pengguna sebagai pengguna berbayar dalam DB kami.
- Pelanggan akan meminta pelayan kami
- Permintaan akan sampai di pengimbang beban kami
- Dan salah satu contoh akan mendapat permintaan dan akan membuat pertanyaan tulis ke dalam DB kami
Nampaknya baik kan? Tiada masalah sehingga sekarang.
Nah, ya sampai sekarang tiada masalah. Tetapi bagaimana jika kita ingin menulis logik perniagaan seperti:-
- ambil pengguna daripada DB
- semak sama ada pengguna adalah pengguna percuma atau sudah berbayar
- jika percuma, maka tandakan ia berbayar dan simpan dalam db
- jika dibayar, hantar "Sudah dibayar" dalam jawapan.
⚡️ Seperti yang kita ketahui (andaikan kita menggunakan MySQL di sini) MySQL DB adalah mematuhi ACID yang bermaksud sebarang pertanyaan akan menjadi atom dan terpencil. yang bermaksud pertanyaan MySQL akan dijalankan dengan cara atom, sama ada ia akan lulus atau gagal. Tetapi ia tidak akan berhenti di antaranya.
? Tetapi ada satu isu di sini. Fikir, Fikir....
- Langkah 1: Kami sedang mengambil pengguna (urus niaga Atom)
- Langkah 2: Menjalankan beberapa logik perniagaan dalam kod
- Langkah 3: Mengemas kini rekod MySQL jika pengguna tidak dibayar (urus niaga Atom)
Apakah yang akan berlaku jika pada Langkah 2, satu lagi permintaan datang untuk membatalkan pembayaran, dan kemudian pertanyaan itu dijalankan dahulu dan menandakan pengguna sebagai percuma, kemudian langkah 3 berjalan dan pengguna ditandai sebagai Berbayar.
?? Hore, Pengguna mendapat akses kepada Produk kami tanpa membayar.
Mengunci
✅ Inilah penyelamat, Kunci
? Kunci ialah struktur yang membenarkan hanya satu utas pada satu masa untuk memasuki bahagian kritikal (blok kod yang tidak boleh diakses oleh berbilang pekerja iaitu benang)
Oleh itu, kami akan memperoleh kunci sebelum dan melepaskan selepas selesai operasi:-
- Langkah 0: cuba dapatkan() kunci
- Langkah 1: Jika diperoleh, Kami sedang mengambil pengguna (urus niaga Atom)
- Langkah 2: Menjalankan beberapa logik perniagaan dalam kod
- Langkah 3: Mengemas kini rekod MySQL jika pengguna tidak dibayar (urus niaga Atom)
- Langkah 4: lepaskan() kunci
? Masalah
Sekarang, inilah masalahnya iaitu jika kami akan menggunakan beberapa dalam struktur data kunci memori atau sebarang kunci berasaskan memori ia akan layak untuk satu contoh untuk aplikasi kami. bagaimana pula dengan kejadian lain yang menjalankan kod yang sama dan mengemas kini dalam DB?
Nah di sini datang konsep penguncian Teragih
? Penguncian Teragih
Di sini kunci bertindak sebagai perkhidmatan terpusat, di mana jika satu contoh perkhidmatan kami memperoleh kunci maka yang lain tidak boleh menggunakan kunci yang sama.
APAKAH KUNCI YANG BOLEH ADA DI SINI DALAM PERKHIDMATAN PEMBAYARAN?
? Untuk kunci pembayaran pengguna yang membuat pembayaran boleh menjadi gabungan = "PAYMENT_" + user_id + amount
Dan ini akan menjadi unik bagi setiap pengguna. Dan kunci ini akan kekal sama sekiranya pengguna membuat pembayaran atau membatalkan pembayaran. Oleh itu, apabila seseorang berlaku tindakan lain tidak dapat diteruskan kerana kedua-dua tindakan akan cuba memperoleh pada kunci yang sama.
? Apa sebenarnya Kunci, Dapatkan kunci, kunci lepaskan. Dan yang paling penting bagaimana redis sedang digunakan?
? Menggunakan Redis untuk melaksanakan Penguncian Teragih
Menggunakan satu contoh Redis:-
Tetapi berikut adalah beberapa masalah dengan satu contoh redis:-
- Satu kejadian mungkin gagal & kunci yang diperoleh mungkin tidak dikeluarkan
- Jika dua kejadian digunakan (master-replica) apabila seorang pelanggan akan memperoleh kunci pada satu tika
- master perlu berkomunikasi perkara yang sama dengan replika untuk disegerakkan. Komunikasi ini sendiri ialah komunikasi async
? Jadi, jika kunci diperoleh pada induk, dan semasa komunikasi ke replika jika induk turun sebelum menyegerak dengan replika. Replika akan menjadi induk di mana Kunci pada kunci yang sama akan tersedia untuk memperoleh yang diperoleh pada induk sebelum ini.
Dua contoh perkhidmatan kami akan dapat memperoleh kunci pada redis walaupun mempunyai dua kejadian (master-replica).
Menggunakan Algoritma Redlock:-
Memperoleh Kunci:- Kami akan cuba memperoleh kunci pada berbilang kejadian redis dengan masa tamat tempoh kunci
Pengesahan Kunci:- kunci akan dianggap sebagai diperoleh jika kejadian redis utama mendapat kunci diperoleh untuk pelanggan
Melepaskan Kunci:- Apabila melepaskan kunci, semua kejadian melepaskan kunci
Dan ya itu sahaja.
❤️ Terima kasih kerana membaca, dan melanggan surat berita kami untuk lebih banyak artikel seperti itu:- https://www.servidedigest.com/
Untuk maklumat lanjut:-
- Jedis di Jawa:- https://redis.io/docs/latest/develop/connect/clients/java/jedis/
- Pelanggan Redis di Golang:- https://github.com/redis/go-redis
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan Kunci Teragih menggunakan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
