Rumah  >  Artikel  >  pangkalan data  >  Pastikan konsistensi dua tulis antara mysql dan redis

Pastikan konsistensi dua tulis antara mysql dan redis

远方*
远方*asal
2022-01-25 10:58:592669semak imbas

1. Senario:

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.

Pastikan konsistensi dua tulis antara mysql dan redis

2 Strategi untuk memastikan konsistensi dua kali

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

3. Kebaikan dan keburukan empat strategi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn