Rumah >pangkalan data >Redis >Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya
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.
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.
Permintaan pemprosesan biasa adalah seperti yang ditunjukkan dalam rajah:
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.
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.
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.
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.
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.
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!