Rumah >pangkalan data >Redis >Bagaimana untuk menyegerakkan data MySQL ke cache Redis
Kelemahan 1: Ia akan menyebabkan kelewatan pada antara muka, kerana penulisan segerak untuk redis sendiri mempunyai kelewatan, dan cuba semula diperlukan Jika redis menulis gagal, anda perlu mencuba lagi, yang lebih memakan masa.
Kelemahan 2: Tiada penyahgandingan Jika redis ranap, utas akan disekat terus
Kelemahan 3: Jika seseorang adalah pangkalan data, ia tidak akan disegerakkan melainkan pangkalan data yang sepadan. dipadamkan secara manual, tetapi terdapat perbezaan masa dalam proses pemadaman Redis
Kelemahan 1: Terdapat lebih banyak lagi lapisan MQ, iaitu, ia akan Terdapat kebarangkalian yang tinggi untuk menyebabkan masalah kelewatan penyegerakan.
Kelemahan 2: Langkah berjaga-jaga mesti diambil untuk ketersediaan MQ
Kelemahan 3: Jika pangkalan data dibuat secara manual, penyegerakan tidak akan dapat dilakukan
Kelebihan 1: Ia dapat mengurangkan masalah kelewatan pengembalian antara muka
Kelebihan 2: MQ sendiri mempunyai mekanisme cuba semula, tidak perlu secara manual tulis kod cuba semula
Kelebihan 3: Penyahgandingan, pertanyaan Mysql dan penyegerakan Redis dipisahkan sepenuhnya dan tidak mengganggu antara satu sama lain
CanalServer akan berpura-pura menjadi pangkalan data hamba MysqlServer untuk melanggan fail Binlog pangkalan data utama MysqlServer
Apabila Canal bermula, ia akan mengkonfigurasi mesej MQ yang sepadan (RabbitMQ, RocketMQ, Kafka). Apabila ia mengesan perubahan dalam fail Binlog, ia akan menukar penyataan sql yang diubah ke dalam format json dan menghantarnya sebagai kandungan mesej Dalam projek MQ
, selagi anda memantau MQ yang sepadan, anda boleh mendapatkan. kandungan Binlog berubah Data Json mempunyai jenis operasi yang jelas (CURD) dan data yang sepadan. Segerakkan sahaja data yang sepadan dengan redis
Kelemahan 1: Keseluruhan proses operasi terusan yang melanggan Binlog adalah satu-benang, jadi dalam menghadapi konkurensi ultra-tinggi, prestasi mungkin tidak cemerlang. Anda boleh menggunakan berbilang Terusan dan berbilang pengguna, tetapi anda perlu memberi perhatian untuk mengelakkan masalah penggunaan berulang dan melakukan pengesahan mati pucuk
Kelebihan 1: Walaupun pangkalan data diubah suai secara manual, ia akan dipantau dan disegerakkan >
Kelebihan 2: Penyegerakan tak segerak, tiada kelewatan tambahan dalam pemulangan antara muka4 Pemadaman berganda tertundaSebelum melaksanakan pengubahsuaian SQL, padamkan data redis dahuluLaksanakan kemas kini sqlLengah untuk satu tempoh masaPadam semula data redis// 延迟双删伪代码 deleteRedisCache(key); // 删除redis缓存 updateMysqlSql(obj); // 更新mysql Thread.sleep(100); // 延迟一段时间 deleteRedisCache(key); // 再次删除该key的缓存Keburukan: Masa kelewatan ini sukar dikawal, berapa lama kelewatan, ini sangat Sukar untuk dinilaiJika anda tidak menggunakan pemadaman berganda tertunda, anda hanya memadam cache dan kemudian mengubah suai data MySQL. Apakah masalah yang akan timbul jika hanya terdapat dua langkah ini? 5. Permintaan tunggal, utas tunggal tiada masalah, tetapi masalah akan berlaku di bawah konkurensi tinggi dan berbilang benang6 Jika utas Thread1 ingin mengemas kini data, utas Thread1 akan membersihkan semula pada masa ini
7 Pada masa ini, thread2 telah tiba, tetapi Thread2 belum selesai mengemas kini mysql 8 mysql, dan kemudian semak data yang ditemui Tulis ke cache 9 Memandangkan Thread1 tidak mempunyai masa untuk mengubah suai data mysql, data yang ditemui oleh Thread2 pada masa ini ialah [data lama], dan Thread2 menulis. data lama kepada Redis sekali lagi 10 Pada masa ini, utas Thread3 datang dan menanyakan Redis dan mendapati bahawa terdapat data, jadi ia terus mendapat data yang dicache Pada masa ini [Thread3 mengetahui data lama] dan kembali secara langsung dengan data lama. Inilah masalahnya 11 Fungsi pemadaman berganda tertunda adalah untuk menghalang Thread2 daripada menulis data lama lagi Dengan pemadaman berganda tertunda, Thread3 masih akan menjadi batal Redis, dan akan mendapat data terkini daripada mysql
12 Jadi masa tunda biasa hendaklah sepanjang masa dari Thread2 menyemak cache untuk mendapatkan data mysql dan kemudian menyimpannya ke redis, sebagai masa tunda Thread1, tetapi masa proses Thread2 akan dipengaruhi oleh banyak faktor Oleh itu, adalah sukar untuk menentukan berapa lama masa yang diperlukan5 Penulisan berganda tertunda
// 延迟双写伪代码 updateMysqlSql(obj); // 更新mysql addRedis(key); // 再次删除该key的缓存
// 完美延迟双写伪代码 开启事务 updateMysqlSql(obj); // 更新mysql addRedis(key); // 再次删除该key的缓存 提交事务Pembetulan kod di atas: Letakkan dua baris kod ke dalam transaksi Hanya apabila T1 selesai melaksanakan Mysql dan Redis, T2 boleh memulakan pelaksanaan, dengan itu memastikan konsistensi data. Adalah disyorkan untuk menggunakan kunci teragihTulisan dua kali Kelemahan: Mysql dan Redis adalah satu-benang. Prestasi tidak bagus, jadi tidak digalakkan menggunakan
Atas ialah kandungan terperinci Bagaimana untuk menyegerakkan data MySQL ke cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!