Rumah Java javaTutorial Bagaimana untuk melaksanakan Kunci Teragih menggunakan Redis

Bagaimana untuk melaksanakan Kunci Teragih menggunakan Redis

Aug 31, 2024 pm 06:31 PM

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

How to implement a Distributed Lock using Redis

Nah perkara tidak selalu berfungsi dalam pengeluaran seperti yang diharapkan. Selalunya apabila anda menjalankan berbilang kejadian aplikasi anda.

How to implement a Distributed Lock using Redis

? 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
How to implement a Distributed Lock using Redis

? 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

How to implement a Distributed Lock using Redis

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:-

How to implement a Distributed Lock using 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

How to implement a Distributed Lock using Redis

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1669
14
Tutorial PHP
1273
29
Tutorial C#
1256
24
Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

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. …

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

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

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

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

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

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 ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

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 ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

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 ...

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

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

See all articles