Rumah > Artikel > pangkalan data > Bagaimana untuk menangani tiga pengecualian utama dalam cache Redis
Redis ialah sumber terbuka sepenuhnya, mematuhi BSD, struktur data nilai kunci berprestasi tinggi. sistem storan menyokong kegigihan data dan boleh menyimpan data dalam memori pada cakera Ia bukan sahaja menyokong data jenis nilai kunci yang mudah, tetapi juga menyediakan penyimpanan struktur data seperti senarai, set, zset, cincang, dll. Fungsi ini sangat berkuasa. Redis juga menyokong sandaran data, iaitu, sandaran data dalam mod tuan-hamba, dengan itu meningkatkan ketersediaan. Kelajuan membaca dan menulis pantas adalah yang paling kritikal, kerana sebagai penyelesaian caching yang paling kerap digunakan dalam pembangunan harian kami, ia telah digunakan secara meluas. Walau bagaimanapun, dalam proses aplikasi sebenar, ia akan mempunyai situasi yang tidak normal seperti runtuhan cache, pecahan cache dan penembusan cache Jika situasi ini diabaikan, ia mungkin membawa akibat bencana yang berikut terutamanya menganalisis pengecualian cache dan penyelesaian dan ringkasan biasa .
Sebilangan besar permintaan yang perlu diproses dalam cache redis dalam tempoh masa masa dihantar ke Pangkalan data diproses, menyebabkan tekanan pada pangkalan data meningkat dengan cepat Dalam kes yang teruk, ia mungkin menyebabkan pangkalan data ranap, menyebabkan keseluruhan sistem runtuh, seperti runtuhan salji, mencetuskan kesan rantaian, jadi. ia dipanggil avalanche cache.
Sebab biasa bagi situasi di atas adalah terutamanya dua perkara berikut:
Sebuah besar jumlah data cache pada masa yang sama Tamat tempoh, mengakibatkan keperluan untuk mendapatkan semula data daripada pangkalan data yang sepatutnya diminta daripada cache.
Redis sendiri gagal dan tidak dapat mengendalikan permintaan, jadi permintaan itu secara semula jadi akan dihantar ke pangkalan data.
Untuk situasi di mana sejumlah besar data cache tamat tempoh pada masa yang sama:
Apabila sebenarnya menetapkan masa tamat, anda harus cuba mengelakkan senario di mana sejumlah besar kunci tamat tempoh pada masa yang sama Jika ia berlaku, tetapkan masa tamat tempoh melalui rawak, penalaan halus dan malah tetapan untuk mengelakkan tamat tempoh pada masa yang sama.
Tambah mutex supaya operasi membina cache tidak akan dilakukan pada masa yang sama.
Strategi kunci dwi, kunci utama ialah cache asal, dan kunci sandaran ialah cache salinan Apabila kunci utama gagal, kunci sandaran boleh diakses daripada kunci utama ditetapkan kepada jangka pendek, dan kunci sandaran ditetapkan untuk jangka panjang.
Strategi cache kemas kini latar belakang, menggunakan tugas berjadual atau baris gilir mesej untuk mengemas kini atau mengalih keluar cache redis, dsb.
Sekiranya redis itu sendiri gagal:
Pada peringkat pencegahan, ia boleh dibina melalui tuan-hamba nod Kluster ketersediaan tinggi bermakna selepas contoh Redis utama ditutup, perpustakaan hamba lain boleh bertukar dengan cepat ke perpustakaan utama dan terus menyediakan perkhidmatan.
Sebaik sahaja peristiwa berlaku, untuk mengelakkan pangkalan data daripada ranap disebabkan terlalu banyak permintaan, pemutus litar perkhidmatan atau strategi pengehadan arus permintaan boleh diguna pakai. Sudah tentu, pemutus litar perkhidmatan adalah agak kasar, menghentikan perkhidmatan sehingga perkhidmatan redis dipulihkan, dan had semasa permintaan adalah agak lembut, memastikan bahawa beberapa permintaan boleh diproses Ia bukan satu pendekatan yang sesuai untuk semua , tetapi masih perlu memilih penyelesaian yang sesuai berdasarkan situasi perniagaan tertentu.
Pecahan cache biasanya berlaku dalam sistem konkurensi tinggi , a sebilangan besar pengguna serentak meminta data yang tiada dalam cache tetapi wujud dalam pangkalan data, iaitu, mereka membaca cache tetapi bukan data secara serentak, dan pergi ke pangkalan data untuk mendapatkan semula data pada masa yang sama, menyebabkan seketika peningkatan tekanan pangkalan data. Berbeza daripada runtuhan cache, pecahan cache merujuk kepada pertanyaan serentak bagi data yang sama bermakna bahawa data yang berbeza telah tamat tempoh, dan banyak data tidak dapat ditemui, jadi pangkalan data dicari.
Sebenarnya, sebab biasa bagi situasi ini ialah cache data panas tertentu telah tamat tempoh Memandangkan ia adalah data panas, bilangan permintaan serentak adalah besar, jadi masih akan ada masalah apabila ia tamat tempoh. Sebilangan besar permintaan masuk pada masa yang sama, dan semuanya mencecah pangkalan data sebelum cache boleh dikemas kini.
Terdapat dua penyelesaian biasa untuk situasi ini:
Mudah dan kasar Jangan tetapkan masa tamat tempoh untuk data hotspot, jadi ia tidak akan luput, dan secara semula jadi keadaan di atas tidak akan berlaku Jika anda ingin membersihkannya kemudian, anda boleh melakukannya melalui latar belakang.
Tambahkan kunci mutex, iaitu selepas tamat tempoh, kecuali untuk permintaan pertanyaan pertama, permintaan kunci boleh diperolehi daripada pangkalan data dan dikemas kini kepada cache semula disekat sehingga kunci dilepaskan dan cache baharu dikemas kini Permintaan seterusnya akan dibuat ke cache, supaya pecahan cache tidak akan berlaku.
Penembusan cache bermakna data tidak dalam redis mahupun dalam redis In pangkalan data, ini menyebabkan setiap kali permintaan masuk, selepas kunci yang sepadan tidak ditemui dalam cache, pangkalan data perlu dicari semula setiap kali, dan didapati pangkalan data tidak memilikinya, yang setara kepada dua pertanyaan yang tidak berguna. Dengan cara ini, permintaan boleh memintas cache dan terus menyemak pangkalan data Jika seseorang ingin menyerang sistem secara berniat jahat pada masa ini, mereka boleh dengan sengaja menggunakan nilai nol atau nilai lain yang tidak wujud untuk membuat permintaan yang kerap, yang akan. memberi tekanan yang lebih besar pada pangkalan data.
Sebab fenomena ini sebenarnya mudah difahami Jika pengguna tidak melakukan operasi atau pemprosesan yang sepadan pada maklumat tertentu dalam logik perniagaan, maka penyimpanan yang sepadan maklumat Sememangnya, tiada data yang sepadan dalam pangkalan data atau cache, dan masalah di atas terdedah untuk berlaku.
Untuk penembusan cache, umumnya terdapat tiga penyelesaian:
Permintaan tidak sah Sekatan terutamanya merujuk kepada pengesahan parameter, pengesahan pengesahan, dll., untuk memintas sejumlah besar permintaan haram dari awal, yang merupakan cara yang diperlukan dalam pembangunan perniagaan sebenar.
Cache nilai kosong atau nilai lalai Jika data yang tidak boleh diperolehi daripada cache tidak diperolehi dalam pangkalan data, maka kami akan tetap cache hasil kosong dan menetapkan yang lebih besar. nilai. Masa tamat tempoh yang singkat. Nilai lalai tetapan ini disimpan dalam cache, supaya nilai itu diperoleh kali kedua dalam cache tanpa terus mengakses pangkalan data, yang boleh menghalang sejumlah besar permintaan berniat jahat daripada berulang kali menggunakan kunci yang sama untuk menyerang.
Gunakan penapis Bloom untuk menentukan dengan cepat sama ada data wujud. Jadi apakah itu penapis Bloom? Ringkasnya, ia boleh memperkenalkan berbilang fungsi cincang bebas untuk memastikan penentuan berat unsur diselesaikan dalam ruang dan kadar salah penilaian. Kerana kita tahu bahawa terdapat situasi perlanggaran cincang, maka jika hanya satu fungsi cincang digunakan, kebarangkalian perlanggaran jelas akan meningkat Untuk mengurangkan konflik ini, kita boleh memperkenalkan beberapa lagi fungsi cincang, dan Penapisan Bloom Idea teras algoritma hash adalah menggunakan pelbagai fungsi hash yang berbeza untuk menyelesaikan konflik sedemikian. Kelebihannya ialah kecekapan ruang yang tinggi dan masa pertanyaan yang singkat, jauh melebihi algoritma lain. Kelemahannya ialah akan terdapat kadar salah pengiktirafan tertentu. Ia tidak dapat menjamin sepenuhnya bahawa kunci yang diminta akan lulus pengesahan penapis Bloom semua, secara teorinya masih akan ada konflik, tidak kira betapa kecilnya kebarangkalian. Walau bagaimanapun, selagi ia tidak melepasi pengesahan penapis Bloom, maka kunci itu mestilah tidak wujud Selagi ini digunakan, anda sebenarnya boleh menapis kebanyakan permintaan untuk kunci yang tidak wujud, yang cukup dalam senario biasa.
Selain daripada tiga masalah pengecualian cache Redis biasa di atas, pemanasan awal cache dan Penurunan taraf cache dua istilah tidak begitu. banyak masalah pengecualian kerana ia adalah dua kaedah pengoptimuman.
Sebelum dan selepas sistem masuk dalam talian, prapemanasan cache akan memuatkan data cache yang berkaitan terus ke dalam sistem cache tanpa bergantung pada operasi pengguna. Ini boleh mengelakkan masalah menanyakan pangkalan data terlebih dahulu dan kemudian menyimpan data apabila pengguna memintanya. Pengguna terus menanyakan data cache yang telah dipanaskan terlebih dahulu Ini boleh mengelakkan trafik serentak tinggi mengakses pangkalan data pada peringkat awal pelancaran sistem, menyebabkan tekanan trafik pada pangkalan data.
Mengikut magnitud data yang berbeza, kaedah berikut boleh digunakan:
Jumlah data tidak besar: Permulaan projek dimuatkan secara automatik.
Jumlah data yang besar: Muat semula cache dengan kerap di latar belakang.
Jumlah data adalah besar: Hanya pramuat operasi cache untuk data panas.
Turun taraf cache bermaksud apabila cache gagal atau terdapat masalah dengan perkhidmatan cache, untuk mengelakkan perkhidmatan cache gagal , menyebabkan masalah runtuhan salji dalam pangkalan data , jadi saya tidak mengakses pangkalan data, tetapi atas sebab tertentu, saya masih mahu memastikan perkhidmatan itu tersedia pada dasarnya, walaupun ia pasti akan merosakkan perkhidmatan. Oleh itu, untuk data cache yang tidak penting, kami boleh menggunakan strategi kemerosotan perkhidmatan.
Terdapat dua kaedah umum:
Akses terus cache data dalam bahagian memori.
Secara langsung kembali kepada nilai lalai yang ditetapkan oleh sistem.
Atas ialah kandungan terperinci Bagaimana untuk menangani tiga pengecualian utama dalam cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!