Apa yang menyebabkan runtuhan salji Redis dan cara menyelesaikannya
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.
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:
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.
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.
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.
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!

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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



Punca dan penyelesaian untuk kesilapan Apabila menggunakan PECL untuk memasang sambungan dalam persekitaran Docker Apabila menggunakan persekitaran Docker, kami sering menemui beberapa sakit kepala ...

Redis ...

Mengenai penggunaan arahan CMD yang cekap di Dockerfile Banyak pengguna Docker baru menggunakan CMD ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Perbandingan beratur redis dan kestabilan MySQL: Kenapa Redis terdedah kepada kehilangan data? Dalam persekitaran pembangunan, menggunakan rangka kerja Php7.2 dan ThinkPHP, kita sering menghadapi pilihan kerjasama ...

Bagaimana untuk menyemak kesahihan sambungan Redis dalam projek Laravel6 adalah masalah biasa, terutamanya apabila projek bergantung kepada Redis untuk pemprosesan perniagaan. Berikut adalah ...

Artikel ini membincangkan cara mengoptimumkan prestasi laman web mengenai sistem Debian. "Debianstrings" bukan istilah standard dan boleh merujuk kepada alat atau teknologi yang digunakan dalam sistem Debian untuk meningkatkan prestasi laman web. Berikut adalah beberapa petua praktikal: 1. Adalah disyorkan untuk menggunakan panel pagoda untuk memudahkan proses pemasangan dan konfigurasi untuk konfigurasi pelayan web dan php persekitaran. Adalah disyorkan untuk memasang nginx1.22.1 sebagai pelayan web, Php8.2 sebagai penterjemah skrip, dan MySQL10.7.3-Mariadb sebagai sistem pangkalan data. Pastikan untuk membolehkan sambungan PHP yang diperlukan, seperti FileInfo, Opcache, Memcached, Red

Django mysql ...
