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.
Nampaknya baik kan? Tiada masalah sehingga sekarang.
Nah, ya sampai sekarang tiada masalah. Tetapi bagaimana jika kita ingin menulis logik perniagaan seperti:-
⚡️ 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....
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.
✅ 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:-
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
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?
Tetapi berikut adalah beberapa masalah dengan satu contoh redis:-
? 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).
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:-
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan Kunci Teragih menggunakan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!