1. Konsep
Konsep penembusan cache adalah sangat mudah memori redis Pangkalan data tidak memilikinya, iaitu, cache tidak terkena, jadi pangkalan data lapisan kegigihan ditanya. Didapati tiada, jadi pertanyaan ini gagal. Apabila terdapat ramai pengguna, cache tidak melanda, jadi mereka semua meminta pangkalan data lapisan kegigihan. Apabila penembusan cache berlaku, pangkalan data lapisan kegigihan akan menanggung beban yang besar.
Anda perlu memberi perhatian kepada perbezaan antara pecahan cache dan pecahan cache merujuk kepada kunci yang sangat panas dan sentiasa membawa konkurensi besar menumpukan pada mengakses titik ini Apabila kunci ini tamat tempoh, konkurensi besar berterusan menembusi cache dan meminta pangkalan data secara langsung, yang seperti memotong lubang pada penghalang.
Terdapat banyak penyelesaian untuk mengelakkan penembusan cache. Beberapa diperkenalkan di bawah.
2. Penyelesaian
(1) Penapis Bloom
Mengikut statistik, tapak web spam dan tapak web biasa di seluruh dunia Terdapat berbilion tapak web secara keseluruhan dan penapis Bloom ialah struktur data yang boleh digunakan pada skala data ini. Menggunakan penapis Bloom mengelakkan keperluan untuk polis Internet membandingkan tapak web spam dalam pangkalan data satu demi satu. Katakan kita menyimpan 100 juta alamat tapak web spam.
Anda boleh bermula dengan 100 juta bit binari, dan kemudian polis Internet menggunakan lapan penjana nombor rawak yang berbeza (F1, F2, …, F8) untuk menjana lapan cap jari maklumat (f1, f2, …, f8) . Seterusnya, penjana nombor rawak G digunakan untuk memetakan lapan cap jari maklumat ini kepada lapan nombor asli g1, g2, …, g8 daripada 1 hingga 100 juta. Akhir sekali, tetapkan nilai binari lapan kedudukan ini kepada satu. Prosesnya adalah seperti berikut:
Pada suatu hari polis Internet menemui tapak web yang mencurigakan dan ingin menentukan sama ada ia adalah tapak web XX tapak web yang mencurigakan telah dicincang Peta kepada 8 mata pada tatasusunan 100 juta bit. Jika terdapat titik yang bukan 1, maka anda boleh yakin bahawa elemen itu tiada dalam set.
Jadi bagaimanakah penapis Bloom ini menyelesaikan penembusan cache dalam redis? Ini sangat mudah, pertama sekali, semua parameter pertanyaan yang mungkin disimpan dalam bentuk cincang Apabila pengguna ingin membuat pertanyaan, mereka menggunakan penapis Bloom untuk mengetahui bahawa mereka tidak berada dalam koleksi, dan kemudian membuangnya secara langsung tanpa menanyakan lapisan kegigihan. .
Borang ini sangat mudah.
2. Cache objek kosong
Apabila lapisan storan terlepas, objek kosong yang dikembalikan akan dicache, dan masa tamat tempoh akan ditetapkan diperoleh daripada cache, melindungi sumber data hujung belakang
Walau bagaimanapun, terdapat dua masalah dengan kaedah ini:
Memandangkan nilai nol mungkin menduduki banyak kedudukan utama dalam cache, cache memerlukan lebih banyak ruang untuk menyimpan lebih banyak pasangan nilai kunci
Walaupun untuk nilai nol Walaupun masa tamat tempoh ditetapkan , data dalam lapisan cache dan lapisan storan masih akan tidak konsisten untuk satu tempoh masa, yang akan memberi kesan kepada perniagaan yang perlu mengekalkan konsistensi.
1 Konsep
Cache avalanche bermakna terdapat ralat dalam lapisan cache dan ia tidak dapat berfungsi dengan baik. Akibatnya, semua permintaan dihantar ke lapisan storan, menyebabkan peningkatan mendadak dalam volum panggilan ke lapisan storan dan berpotensi menyebabkan ia ranap.
2. Penyelesaian
(1) redis ketersediaan tinggi
Maksud idea ini ialah kerana redis mungkin gagal, maka saya menambah beberapa lagi redis supaya yang lain boleh terus berfungsi selepas satu gagal, sebenarnya ia adalah satu kelompok.
(2) Penurunan taraf mengehadkan semasa
Idea penyelesaian ini adalah menggunakan kaedah mengunci atau beratur untuk mengawal benang yang membaca pangkalan data dan menulis kepada cache selepas kuantiti cache tamat. Sebagai contoh, hanya satu utas dibenarkan untuk menanyakan data dan menulis cache untuk mengendalikan kunci tertentu, dan utas lain perlu menunggu.
(3) Pemanasan data
Maksud pemanasan data ialah sebelum penggunaan rasmi, saya terlebih dahulu mengakses data yang mungkin terlebih dahulu, supaya beberapa bahagian boleh diakses dalam kuantiti yang banyak Data akan dimuatkan ke dalam cache. Cetuskan pemuatan cache kekunci yang berbeza secara manual dan tetapkan masa tamat tempoh yang berbeza untuk cuba mengimbangi masa ketidaksahihan cache dan menghalang sejumlah besar akses daripada berlaku pada masa yang sama.
Atas ialah kandungan terperinci Apakah konsep penembusan cache Redis dan avalanche cache. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!