


Apakah strategi kemas kini untuk pangkalan data MySQL dan konsistensi cache Redis?
1. Kemas kini strategi
1. Jika terdapat data dalam Redis, ia perlu sama dengan nilai dalam pangkalan data.
2. Jika tiada data dalam Redis, Redis mesti dikemas kini secara serentak dengan nilai terkini dalam pangkalan data.
2. Baca dan tulis cache
1 Strategi tulis langsung segerak
Menulis ke pangkalan data juga menulis ke cache Redis secara serentak dengan data dalam pangkalan data; untuk cache baca dan tulis Dalam erti kata lain, untuk memastikan bahawa data dalam cache dan pangkalan data adalah konsisten, adalah perlu untuk memastikan strategi tulis langsung segerak.
2. Strategi tulis perlahan tak segerak
Dalam sesetengah operasi perniagaan, selepas data MySQL dikemas kini, data Redis dibenarkan untuk disegerakkan selepas tempoh masa tertentu, seperti sistem logistik.
Apabila pengecualian berlaku, tindakan yang gagal itu perlu ditampal semula, dan ia perlu ditulis semula dengan bantuan rabbitmq atau kafka.
3. Periksa semula strategi penguncian
Berbilang utas menanyakan data ini dalam pangkalan data pada masa yang sama, kemudian kita boleh menggunakan kunci mutex pada permintaan data pertanyaan pertama Hidupkannya.
Urutan lain tidak boleh mendapatkan kunci pada ketika ini dan tunggu sehingga urutan pertama menanyakan data dan kemudian menyimpannya dalam cache.
Kemudian benang masuk dan mendapati bahawa sudah ada cache, jadi mereka pergi terus ke cache.
public String get(String key){ // 从Redis缓存中读取 String value = redisTemplate.get(key); if(value != null){ return value; } synchronized (RedisTest.class){ // 重新尝试从Redis缓存中读取 value = redisTemplate.get(key); if(value != null){ return value; } // 从MySQL数据库中查询 value = studentDao.get(key); // 写入Redis缓存 redisTemplate.setnx(key,value,time); return value; } }
4. Kemas kini strategi untuk pangkalan data dan konsistensi cache
1 Kemas kini pangkalan data dahulu, kemudian kemas kini Redis
Mengikut akal, ini sepatutnya berlaku, bukan. ? Jadi, apakah masalah dalam kes ini?
Apakah yang berlaku jika pengecualian berlaku sebelum mengemas kini Redis selepas berjaya mengemas kini pangkalan data?
Pangkalan data tidak konsisten dengan data cache dalam Redis.
2. Kemas kini cache dahulu, kemudian kemas kini pangkalan data
Akan ada masalah dalam situasi berbilang benang.
Contohnya
Kemas kini benang 1 redis = 200;
Kemas kini benang 2 redis = 100;
Kemas kini Thread 2 MySQL = 100;
Kemas kini Thread 1 MySQL = 200; = 100, MySQL=200;
3. Padam cache dahulu, kemudian kemas kini pangkalan data
Thread 1 memadam data cache Redis, dan kemudian mengemas kini pangkalan data MySQL
Thread 2 datang untuk membunuh saya sebelum MySQL; dikemas kini. , baca data cache;Walau bagaimanapun, pangkalan data MySQL belum dikemas kini, thread 2 membaca nilai lama dalam MySQL, dan kemudian thread 2 juga menulis nilai lama ke Redis sebagai cache data; > Thread 1. Selepas mengemas kini data MySQL, saya mendapati bahawa sudah ada data dalam Redis, yang telah dipadam sebelum ini, jadi saya tidak akan mengemas kininya; .
Pemadaman berganda tertunda
Pemadaman berganda tertunda boleh menyelesaikan masalah di atas, selagi masa tidur lebih lama daripada masa untuk thread 2 membaca data dan kemudian menulisnya ke cache, iaitu benang 1 Operasi pembersihan cache kedua mesti dilakukan selepas utas 2 menulis ke cache, untuk memastikan data dalam cache Redis dikemas kini.
/** * 延时双删 * @autor 哪吒编程 */ public void deleteRedisData(Student stu){ // 删除Redis中的缓存数据 jedis.del(stu); // 更新MySQL数据库数据 studentDao.update(stu); // 休息两秒 try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } // 删除Redis中的缓存数据 jedis.del(stu); }
Masalah terbesar dengan pemadaman berganda yang tertunda adalah tidur Hari ini, apabila kecekapan adalah raja, lebih baik tidak menggunakan tidur.
Saya rasa anda lambat walaupun anda tidak tidur, tetapi anda masih tertidur... 1 kemas kini pangkalan data dahulu, kemudian padamkan cache Redis
Urutan 2 memulakan permintaan sebelum utas 1 memadamkan cache Redis dan mendapatkan cache Redis yang tidak dipadamkan
Urutan 1 baru sahaja memadamkan data cache Redis pada masa ini;
Masalah itu masih wujud, dan ia berterusan dan berterusan tanpa henti.
Bagaimana untuk menyelesaikan situasi ini? Perkenalkan perisian tengah mesej untuk menyelesaikan pertempuran, dan semak semula secara terperinci.
Kemas kini pangkalan data;
Pangkalan data menulis maklumat operasi ke log binlog; >Langgan program Ekstrak kunci dan data; maklumat data kepada perisian tengah mesej; 🎜>Nezha mengesyorkan menggunakan Bab 1 Empat cara, mula-mula kemas kini pangkalan data dan kemudian padamkan cache.
Kekurangan kaedah ① dan kaedah ② terlalu jelas untuk dipertimbangkan;
Kaedah tidur ③ sentiasa sakit kepala;Kaedah ④ adalah penyelesaian yang lebih komprehensif, tetapi ia meningkatkan Kos pembelajaran dan kos penyelenggaraan kerana penambahan perisian tengah mesej.
- 5. Prinsip kerja replikasi master-slave MySQL
- 1 Apabila data pada pelayan induk berubah, perubahannya ditulis ke dalam peristiwa binari fail log; 2. Pelayan salve slave akan mengesan log binari pada pelayan induk dalam selang masa tertentu untuk mengesan sama ada ia telah berubah
- Jika pelayan induk dikesan log peristiwa binari pelayan berubah, Benang I/O dimulakan untuk meminta log peristiwa binari induk 3 Pada masa yang sama, pelayan induk memulakan Benang buangan untuk setiap Benang I/O untuk dihantar data padanya. Hantar log peristiwa binari;
- 4
5. Pelayan salve slave akan memulakan SQL Thread untuk membaca log binari dari log geganti dan memainkannya semula secara setempat untuk menjadikan datanya konsisten dengan pelayan utama
6 dan SQL Thread akan tidur dan menunggu masa berikutnya ia dikejutkan.
Atas ialah kandungan terperinci Apakah strategi kemas kini untuk pangkalan data MySQL dan konsistensi cache Redis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Prestasi pertanyaan MySQL boleh dioptimumkan dengan membina indeks yang mengurangkan masa carian daripada kerumitan linear kepada kerumitan logaritma. Gunakan PreparedStatements untuk menghalang suntikan SQL dan meningkatkan prestasi pertanyaan. Hadkan hasil pertanyaan dan kurangkan jumlah data yang diproses oleh pelayan. Optimumkan pertanyaan penyertaan, termasuk menggunakan jenis gabungan yang sesuai, membuat indeks dan mempertimbangkan untuk menggunakan subkueri. Menganalisis pertanyaan untuk mengenal pasti kesesakan; gunakan caching untuk mengurangkan beban pangkalan data;

Membuat sandaran dan memulihkan pangkalan data MySQL dalam PHP boleh dicapai dengan mengikuti langkah berikut: Sandarkan pangkalan data: Gunakan arahan mysqldump untuk membuang pangkalan data ke dalam fail SQL. Pulihkan pangkalan data: Gunakan arahan mysql untuk memulihkan pangkalan data daripada fail SQL.

Bagaimana untuk memasukkan data ke dalam jadual MySQL? Sambung ke pangkalan data: Gunakan mysqli untuk mewujudkan sambungan ke pangkalan data. Sediakan pertanyaan SQL: Tulis pernyataan INSERT untuk menentukan lajur dan nilai yang akan dimasukkan. Laksanakan pertanyaan: Gunakan kaedah query() untuk melaksanakan pertanyaan sisipan Jika berjaya, mesej pengesahan akan dikeluarkan.

Salah satu perubahan utama yang diperkenalkan dalam MySQL 8.4 (keluaran LTS terkini pada 2024) ialah pemalam "Kata Laluan Asli MySQL" tidak lagi didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya. Perubahan ini mempengaruhi PHP dan apl lain

Untuk menggunakan prosedur tersimpan MySQL dalam PHP: Gunakan PDO atau sambungan MySQLi untuk menyambung ke pangkalan data MySQL. Sediakan penyata untuk memanggil prosedur tersimpan. Laksanakan prosedur tersimpan. Proses set keputusan (jika prosedur tersimpan mengembalikan hasil). Tutup sambungan pangkalan data.

Mencipta jadual MySQL menggunakan PHP memerlukan langkah berikut: Sambung ke pangkalan data. Buat pangkalan data jika ia tidak wujud. Pilih pangkalan data. Buat jadual. Laksanakan pertanyaan. Tutup sambungan.

PHP menyediakan kaedah berikut untuk memadam data dalam jadual MySQL: DELETE statement: digunakan untuk memadamkan baris keadaan yang sepadan daripada jadual. Pernyataan TRUNCATETABLE: digunakan untuk mengosongkan semua data dalam jadual, termasuk ID yang dinaikkan secara automatik. Kes praktikal: Anda boleh memadamkan pengguna daripada pangkalan data menggunakan borang HTML dan kod PHP. Borang menyerahkan ID pengguna dan kod PHP menggunakan pernyataan DELETE untuk memadam rekod yang sepadan dengan ID daripada jadual pengguna.

Menyediakan kumpulan sambungan MySQL menggunakan PHP boleh meningkatkan prestasi dan kebolehskalaan. Langkah-langkahnya termasuk: 1. Pasang sambungan MySQLi 2. Buat kelas kumpulan sambungan 3. Tetapkan konfigurasi kumpulan sambungan 5. Dapatkan dan lepaskan sambungan; Dengan pengumpulan sambungan, aplikasi boleh meningkatkan prestasi dengan mengelak daripada membuat sambungan pangkalan data baharu untuk setiap permintaan.
