Rumah >pangkalan data >Redis >Contoh analisis masalah cache Redis
Dalam senario perniagaan sebenar kami, Redis biasanya digunakan bersama dengan pangkalan data lain untuk mengurangkan tekanan pada pangkalan data belakang, seperti pangkalan data hubungan . Digunakan dengan pangkalan data MySQL.
Redis akan cache data yang kerap ditanya dalam MySQL , seperti data hotspot, supaya apabila pengguna datang untuk mengakses, mereka tidak perlu pergi ke MySQL. Daripada bertanya, data cache dalam Redis diperoleh secara langsung, dengan itu mengurangkan tekanan bacaan pada pangkalan data bahagian belakang.
Jika data yang ditanya oleh pengguna tidak tersedia dalam Redis, permintaan pertanyaan pengguna akan dipindahkan ke pangkalan data MySQL Apabila MySQL mengembalikan data kepada klien, data akan dicache dalam Redis pada masa yang sama, supaya apabila pengguna membaca semula, mereka boleh mendapatkan data terus daripada Redis. Carta alir adalah seperti berikut:
2. Penembusan Cache2.1 PengenalanApabila menggunakan Redis sebagai pangkalan data cache, kita pasti akan menghadapi tiga masalah caching biasa
Penembusan Cache
Penembusan Cache
Cache Avalanche
2.2 PenyelesaianPenembusan Cache bermaksud bahawa apabila pengguna menanyakan data tertentu, data tidak wujud dalam Redis, iaitu, cache tidak melanda Pada masa ini, permintaan pertanyaan akan dialihkan ke pangkalan data lapisan kegigihan MySQL, dan didapati bahawa data itu berlaku. tidak wujud dalam MySQL sama ada, MySQL hanya boleh mengembalikan objek kosong, menunjukkan bahawa pertanyaan itu gagal. Jika terdapat banyak permintaan sedemikian, atau pengguna menggunakan permintaan sedemikian untuk melakukan serangan berniat jahat, ia akan memberi tekanan yang besar pada pangkalan data MySQL dan bahkan runtuh Fenomena ini dipanggil penembusan cache.
Apabila MySQL Bila objek kosong dikembalikan, Redis menyimpan cache objek dan menetapkan masa tamat untuknya. Apabila pengguna memulakan permintaan yang sama sekali lagi, objek kosong akan diperoleh daripada cache Permintaan pengguna disekat dalam lapisan cache, sekali gus melindungi pangkalan data bahagian belakang Terdapat juga beberapa masalah walaupun permintaan tidak boleh memasuki MSQL, strategi ini akan menduduki ruang cache Redis.
Simpan dahulu semua kunci data tempat liputan yang boleh diakses oleh pengguna Dalam Bloom penapis (juga dipanggil pemanasan cache) , apabila pengguna memintanya, ia akan terlebih dahulu melalui penapis Bloom Penapis Bloom akan menentukan sama ada kunci yang diminta wujud . maka permintaan akan ditolak terus, jika tidak, pertanyaan akan terus dilaksanakan, mula-mula pergi ke cache untuk membuat pertanyaan, jika tiada cache, kemudian pergi ke pangkalan data untuk membuat pertanyaan. Berbanding dengan kaedah pertama, menggunakan kaedah penapis Bloom adalah lebih cekap dan praktikal. Rajah proses adalah seperti berikut:
2.3 Perbandingan penyelesaianPemanasan awal cache ialah proses memuatkan data yang berkaitan ke dalam sistem cache Redis terlebih dahulu sebelum sistem bermula. Ini mengelakkan memuatkan data apabila pengguna memintanya.
Kedua-dua penyelesaian boleh menyelesaikan masalah penembusan cache, tetapi senario penggunaannya berbeza:
3. Pecahan cache3.1 PengenalanCache objek kosong: sesuai untuk senario di mana bilangan kunci untuk data kosong adalah terhad dan kebarangkalian permintaan kunci berulang adalah tinggi.
Penapis Bloom: sesuai untuk senario di mana kunci data kosong berbeza dan kebarangkalian permintaan kunci berulang adalah rendah.
3.2 PenyelesaianPecahan cache bermakna data yang ditanya oleh pengguna tidak wujud dalam cache , tetapi ia wujud dalam pangkalan data bahagian belakang Sebab fenomena ini biasanya disebabkan oleh tamat tempoh kunci dalam cache. Sebagai contoh, kunci data panas menerima sejumlah besar akses serentak sepanjang masa Jika kunci tiba-tiba gagal pada masa tertentu, sejumlah besar permintaan serentak akan memasuki pangkalan data bahagian belakang, menyebabkan tekanannya meningkat serta-merta. Fenomena ini dipanggil pecahan cache.
Tetapkan data tempat liputan agar tidak tamat tempoh.
Gunakan kaedah kunci teragih untuk mereka bentuk semula penggunaan cache Prosesnya adalah seperti berikut:
Kunci: Apabila kami menanyakan data mengikut kunci, kami terlebih dahulu menanyakan cache Jika tidak, kami menguncinya melalui kunci yang diedarkan, dan proses pertama untuk mendapatkan kunci ialah Enter pertanyaan pangkalan data bahagian belakang dan menampan hasil pertanyaan kepada Redis.
Membuka kunci: Apabila proses lain mendapati bahawa kunci diduduki oleh proses tertentu, mereka memasuki keadaan menunggu Selepas membuka kunci, proses lain mengakses kekunci cache mengikut giliran.
Tidak pernah luput: Penyelesaian ini tidak menetapkan yang sebenar Bagi masa tamat tempoh, sebenarnya tiada siri bahaya yang disebabkan oleh kekunci panas, tetapi akan terdapat ketidakkonsistenan data, dan kerumitan kod akan meningkat.
Mutex lock: Penyelesaian ini agak mudah, tetapi terdapat bahaya tersembunyi tertentu Jika terdapat masalah dalam proses pembinaan cache atau ia mengambil masa yang lama, mungkin terdapat kebuntuan dan menyekat kolam benang Berisiko, tetapi kaedah ini boleh mengurangkan beban storan bahagian belakang dan mencapai konsistensi yang lebih baik.
Cache avalanche bermakna sejumlah besar kunci dalam cache tamat tempoh pada masa yang sama , dan pada masa ini data Bilangan lawatan adalah sangat besar, yang membawa kepada peningkatan mendadak dalam tekanan pada pangkalan data bahagian belakang dan mungkin menyebabkan ia ranap Fenomena ini dipanggil runtuhan cache. Ia berbeza daripada pecahan cache. Pecahan cache berlaku apabila kunci panas tertentu tiba-tiba tamat tempoh apabila jumlah konkurensi sangat besar, manakala longsoran cache berlaku apabila sejumlah besar kunci tamat tempoh pada masa yang sama, jadi ia bukan susunan yang sama magnitud sama sekali.
Dalam untuk mengurangkan kerosakan cache dan masalah runtuhan salji yang disebabkan oleh sejumlah besar kunci tamat tempoh pada masa yang sama, strategi untuk tidak pernah tamat tempoh data hotspot boleh diguna pakai, yang serupa dengan salji cache. Di samping itu, untuk mengelakkan kunci daripada tamat tempoh pada masa yang sama, anda boleh menetapkan masa tamat tempoh rawak untuknya.
Satu Redis mungkin gagal kerana runtuhan salji, jadi anda boleh menambah beberapa Redis lagi , bina kluster, jika ada yang menutup telefon, yang lain boleh terus bekerja.
Atas ialah kandungan terperinci Contoh analisis masalah cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!