Rumah  >  Artikel  >  pangkalan data  >  Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

PHPz
PHPzke hadapan
2023-06-01 10:55:061451semak imbas

1. Kata Pengantar

Seperti yang kita sedia maklum, salah satu kesesakan komputer ialah IO Untuk menyelesaikan masalah ketidakpadanan antara memori dan kelajuan cakera, cache dicipta untuk memasukkan beberapa data panas ingatan dan gunakannya mengikut keperluan, kurangkan sambungan permintaan ke pangkalan data, dan elakkan pangkalan data daripada digantung. Perlu diingat bahawa sama ada ia pecahan atau penembusan dan runtuhan salji yang dibincangkan kemudian, semuanya adalah di bawah premis konkurensi tinggi, seperti apabila kunci panas tertentu dalam cache gagal.

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

2 Punca masalah

Terdapat dua sebab utama:

  • 1.

  • 2. Kunci dihapuskan dengan penggantian halaman.

Atas sebab pertama, di Redis, Key mempunyai masa tamat jika kunci gagal pada saat tertentu (jika pusat membeli-belah melakukan aktiviti, bermula dari tengah malam), kemudian selepas tengah malam , kunci tertentu akan tamat tempoh Semua permintaan pertanyaan produk akan ditekan ke pangkalan data, menyebabkan pangkalan data runtuh.

Atas sebab kedua, kerana memori terhad, data baharu mesti dicache dan data lama mesti dicache sepanjang masa, jadi dalam strategi penggantian halaman tertentu (ilustrasi algoritma penggantian halaman biasa), data mesti tersingkir , jika tiada siapa mengambil berat tentang produk tertentu sebelum acara itu, ia pasti akan tersingkir.

3. Memproses idea untuk menangani kerosakan

Permintaan pemprosesan biasa adalah seperti yang ditunjukkan dalam rajah:

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

Memandangkan tamat tempoh kunci adalah tidak dapat dielakkan, tinggi Apabila trafik datang ke Redis, mengikut ciri satu benang Redis, ia boleh dianggap bahawa tugasan dilaksanakan secara berurutan dalam baris gilir Apabila permintaan sampai ke Redis dan mendapati bahawa Kunci telah tamat tempoh, operasi dilakukan: menetapkan kunci.

Prosesnya secara kasar seperti berikut:

  • Permintaan sampai ke Redis, dan didapati bahawa Kunci Redis telah tamat tempoh tiada kunci, kembali ke belakang baris gilir dan beratur

  • Tetapkan kunci Ambil perhatian bahawa ia sepatutnya setnx(), bukan set(), kerana urutan lain mungkin telah ditetapkan kunci.

  • Dapatkan kunci, ambil Apabila kunci dicapai, pergi ke pangkalan data untuk mendapatkan semula data dan lepaskan kunci selepas permintaan kembali.

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

Tetapi ia menimbulkan persoalan baharu. Bagaimana jika permintaan untuk mendapatkan data itu tergantung selepas mendapat kunci itu? . Proses lain sedang menunggu kunci Penyelesaiannya ialah:

Tetapkan masa tamat tempoh untuk kunci tersebut mudah untuk mengatakan bahawa kunci digantung, tetapi jika ia adalah kunci Bagaimana dengan tamat masa Iaitu, data tidak diambil dalam masa yang ditetapkan, tetapi kunci tamat tempoh. tetapi ia tidak boleh dipercayai kerana permintaan pertama mungkin tamat masa Jika permintaan berikutnya Ia juga tamat masa Selepas beberapa tamat masa berturut-turut, nilai masa tamat kunci pastinya terlalu besar.

Idea lain ialah memulakan urutan lain dan memantaunya Jika data pengambilan benang tidak ditutup, tangguhkan masa tamat tempoh kunci dengan sewajarnya.

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

4. Penembusan

Sebab utama penembusan adalah kerana banyak permintaan mengakses data yang tidak wujud dalam pangkalan data menjual buku sentiasa diminta untuk menanyakan produk teh, kerana cache Redis digunakan terutamanya untuk menyimpan data panas, data yang tidak wujud dalam pangkalan data tidak boleh dicache secara langsung ke pangkalan data dan mengembalikan hasil pertanyaan "tiada". .

Untuk menangani permintaan seperti ini, penyelesaiannya ialah menambah lapisan penapis pada permintaan akses, seperti penapis Bloom, penapis Bloom dipertingkatkan dan penapis cuckoo.

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

Selain penapis Bloom, anda boleh menambah beberapa semakan parameter Contohnya, id data pangkalan data biasanya bertambah jika anda meminta parameter seperti id = -10, ia pasti akan dipintas, untuk mengelakkan situasi ini, boleh melakukan operasi seperti pengesahan ketulenan pengguna.

5. Avalanche

Avalanche adalah serupa dengan pecahan Perbezaannya ialah pecahan adalah apabila kunci hotspot gagal pada masa tertentu, manakala avalanche adalah apabila sejumlah besar kunci hotspot gagal dalam sesuatu. instant. Terdapat banyak di rangkaian yang menekankan bahawa strategi untuk menyelesaikan runtuhan adalah untuk membuat masa tamat secara rawak selepas titik sifar, pekali ditukar kepada 3%. Jika data lepas digunakan, ia dipanggil data kotor.

Sememangnya tidak, anda juga boleh menyimpan wang f0c; Anda menyimpan 3 juta faedah sehingga hujung tahun, tetapi di sebelah hanya ada 2 juta Ini bukan bergaduh, gurau sahaja~

Idea yang betul ialah anda mesti melihat dahulu Periksa sama ada tamat tempoh kunci berkaitan dengan masa Jika ia tidak berkaitan dengan masa, ia boleh diselesaikan dengan masa tamat tempoh rawak.

Jika ia berkaitan dengan masa, sebagai contoh, bank baru sahaja menyebut perubahan pekali tertentu pada hari tertentu, maka penyelesaian pecah pergantungan yang kuat mesti digunakan untuk mengemas kini semua kunci dengan urutan lalu terlebih dahulu.

Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya

Semasa mengemas kini kekunci tempat liputan di latar belakang, lapisan perniagaan akan menangguhkan permintaan masuk, seperti tidur sebentar selama beberapa milisaat atau saat, untuk menyebarkan tekanan pada yang berikutnya kemas kini kunci tempat liputan.

Atas ialah kandungan terperinci Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam