Konsisten tulis dua kali bermakna apabila kami mengemas kini data dalam pangkalan data, data dalam redis juga mesti dikemas kini secara serentak. Proses membaca data menggunakan redis Apabila pengguna mengakses data, data akan dibaca daripada cache terlebih dahulu cache, pangkalan data akan disoal dahulu Simpan data yang ditanya ke cache dan kemudian mengembalikannya kepada pengguna.
1 Kemas kini cache dahulu, kemudian kemas kini pangkalan data
2 pangkalan data dahulu , kemudian kemas kini cache
3 Padam cache dahulu, kemudian kemas kini pangkalan data
4 Kemas kini pangkalan data dahulu, kemudian padamkan cache
1 Kemas kini cache dahulu, kemudian kemas kini pangkalan data
Masalahnya adalah jelas pangkalan data gagal dikemas kini, data kotor dalam cache akan disebabkan
2 Kemas kini pangkalan data dahulu, kemudian kemas kini cache
Jika konkurensi tinggi, situasi berikut mungkin wujud. Thread A mengemas kini pangkalan data Jika disebabkan oleh rangkaian atau sebab lain, Thread A tidak mempunyai masa untuk mengemas kini cache Pada masa ini, proses B mengemas kini pangkalan data dan hanya memproses A kemas kini cache. Pada masa ini, kemas kini thread B pada cache akan hilang, seperti kehilangan transaksi
3 Padamkan cache dahulu, kemudian kemas kini pangkalan data
Strategi ini mungkin telah mengelakkan kehilangan cache dalam strategi 2, tetapi di bawah keadaan konkurensi yang tinggi, terdapat juga ketidakkonsistenan Sebagai contoh, apabila utas A melakukan operasi tulis, ia mula-mula memadam cache dan kemudian bersedia untuk berkomunikasi dengan pangkalan data baharu. . Pada masa ini, utas B melakukan operasi tulis tanpa menekan cache, dan kemudian menanyakan pangkalan data Pada masa ini, nilai lama dibaca, dan menyimpan nilai lama yang ditanya ke cache . Pada masa ini, pangkalan data dan cache tidak konsisten lagi. Masa kelewatan di sini mestilah lebih besar daripada masa operasi membaca perniagaan.
4. Kemas kini pangkalan data terlebih dahulu, kemudian padamkan cache
Tidak kira betapa tingginya konkurensi, akan ada ketidakkonsistenan, seperti apabila benang A membaca data. , apabila bersedia untuk menulis ke cache, benang B mengemas kini pangkalan data, dan kemudian melakukan operasi memadam cache Pada masa ini, benang A menulis nilai lama ke dalam cache, walaupun kebarangkalian ini berlaku adalah agak rendah, kerana tulis. masa operasi lebih besar daripada masa operasi baca. Penyelesaian: Pemadaman berganda tertunda masih menjadi masalah Apakah yang perlu saya lakukan jika pemadaman cache gagal. Selepas pemadaman gagal, kita boleh meletakkan kunci untuk dipadamkan ke dalam baris gilir, dan kemudian cuba memadamkannya berulang kali sehingga pemadaman berjaya.
Atas ialah kandungan terperinci Pastikan konsistensi dua tulis antara mysql dan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!