


Bagaimana untuk memastikan konsistensi antara cache Redis dan pangkalan data
Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan cara memastikan ketekalan cache redis dan pangkalan data, termasuk mengemas kini cache dan mengemas kini pangkalan data, dsb. Semoga ia membantu semua orang.
Pembelajaran yang disyorkan: Tutorial pembelajaran Redis
1. Empat strategi penyegerakan:
Ingin memastikan caching Konsisten dengan penulisan berganda pangkalan data, terdapat 4 cara, iaitu, 4 strategi penyegerakan:
- Kemas kini cache dahulu, kemudian kemas kini pangkalan data
- Kemas kini pangkalan data dahulu, kemudian kemas kini cache;
- Daripada 4 strategi penyegerakan ini, apa yang perlu kita bandingkan ialah:
- Kaedah manakah yang lebih sesuai untuk mengemas kini cache atau memadam cache? Perlukah pangkalan data dikendalikan dahulu atau cache dahulu?
2. Kemas kini cache atau padam cache
Seterusnya, mari analisa sama ada kita perlu mengemas kini cache atau memadam cache.
2.1 Kemas kini cache
Kelebihan:
Cache dikemas kini dalam masa setiap kali data berubah, jadi kehilangan kurang berkemungkinan berlaku semasa pertanyaan.Kelemahan:
Mengemas kini cache agak mahal. Jika data perlu menjalani pengiraan yang rumit sebelum ditulis ke cache, kemas kini cache yang kerap akan menjejaskan prestasi pelayan. Jika ini adalah senario perniagaan di mana data ditulis dengan kerap, mungkin tiada perniagaan yang membaca data apabila cache kerap dikemas kini.2.2 Padam cache
Kelebihan:
Operasi mudah, tidak kira sama ada operasi kemas kini rumit atau tidak, data dalam cache akan menjadi dipadamkan secara langsung.Kelemahan:
Selepas memadamkan cache, cache pertanyaan seterusnya akan terlepas dan pangkalan data perlu dibaca semula. Daripada perbandingan di atas, secara umum, memadam cache adalah penyelesaian yang lebih baik.3 Kendalikan pangkalan data atau cache dahulu Seterusnya, mari analisa sama ada pangkalan data atau cache perlu dikendalikan terlebih dahulu.
Mula-mula, kami akan memadam cache dahulu dan mengemas kini pangkalan data terlebih dahulu, dan membuat perbandingan di:
3.1 Padam cache dahulu dan kemudian kemas kini pangkalan data 出现失败
Seperti di atas Gambar menunjukkan masalah yang mungkin berlaku apabila cache dipadamkan dahulu dan kemudian pangkalan data dikemas kini:
Thread A berjaya memadamkan cache, tetapi thread A gagal mengemas kini pangkalan data;
- Akhirnya, data cache dan pangkalan data adalah konsisten, tetapi ia masih data lama
- 3.2 Kemas kini pangkalan data dahulu dan kemudian padamkan cache
Seperti yang ditunjukkan di atas, pangkalan data dikemas kini dahulu dan kemudian cache dipadamkan apabila
ialah:
Thread A berjaya mengemas kini pangkalan data. , tetapi utas A gagal memadamkan cache;出现失败
- Akhirnya, utas A berjaya memadamkan cache dan utas lain mengakses data yang sama dalam cache, yang sama dengan data dalam pangkalan data.
- Akhirnya, data cache dan pangkalan data adalah konsisten, tetapi beberapa urutan akan membaca data lama.
- Selepas perbandingan di atas, kami mendapati bahawa pada masa , adalah mustahil untuk membezakan dengan jelas kaedah mana yang lebih baik: memadam cache dahulu atau mengemas kini pangkalan data dahulu, berfikir bahawa kedua-duanya mempunyai masalah. Kami akan membandingkan kedua-dua kaedah ini kemudian, tetapi di sini kita membincangkan terlebih dahulu bagaimana untuk menyelesaikan masalah yang timbul dalam senario di atas?
menggunakan mekanisme cuba semula untuk menyelesaikan masalah 出现失败
dua gambar di atas Sudah dicat.
:
Seperti yang ditunjukkan di atas, cache dipadamkan pertama Kemas kini pangkalan data sekali lagi Kemungkinan masalah dalam 没有出现失败时
:
- Thread A berjaya memadamkan cache;
- Thread B gagal membaca cache; >Thread B berjaya mengemas kini data lama ke cache;
- Dapat dilihat bahawa kedua-dua langkah proses A berjaya, tetapi disebabkan keselarasan, proses B mengakses cache antara dua langkah ini.
- Hasil akhirnya ialah data lama disimpan dalam cache dan data baharu disimpan dalam pangkalan data, dan kedua-dua data itu tidak konsisten.
Seperti yang ditunjukkan di atas, pangkalan data dikemas kini terlebih dahulu dan kemudian cache dipadamkan dalam
: Thread A berjaya mengemas kini pangkalan data;
Thread B berjaya membaca cache; 没有出现失败时
- Dapat dilihat bahawa
- cache terakhir adalah konsisten dengan data dalam pangkalan data, dan kedua-duanya adalah data terkini . Tetapi utas B membaca data lama semasa proses ini mungkin terdapat utas lain seperti utas B yang membaca data lama dalam cache antara dua langkah ini, tetapi kerana kelajuan pelaksanaan kedua-dua langkah ini akan menjadi lebih cepat, Jadi kesannya tidak. besar. Selepas dua langkah ini, apabila proses lain membaca data cache, masalah yang serupa dengan proses B tidak akan berlaku.
- Kesimpulan akhir:
Selepas perbandingan, anda akan mendapati bahawa mengemas kini pangkalan data terlebih dahulu dan kemudian memadamkan cache adalah penyelesaian dengan kesan yang kurang. Jika langkah kedua gagal, mekanisme cuba semula boleh digunakan untuk menyelesaikan masalah. 4. Kelewatan pemadaman berganda
Kami menyebut di atas bahawa
jika cache dipadamkan dahulu dan kemudian pangkalan data dikemas kini
, ia mungkin menyebabkan masalah walaupun terdapat tiada kegagalan dalam data. Jika dalam aplikasi sebenar, kita perlu memilih kaedah ini kerana pertimbangan tertentu, adakah cara untuk menyelesaikan masalah ini? Jawapannya ya, iaitu menggunakan strategi pemadaman berganda tertunda
Idea asas pemadaman berganda tertunda adalah seperti berikut: Padam cache; Kemas kini pangkalan data ;tidur N milisaat;
- Padam cache sekali lagi.
- Selepas menyekat untuk satu tempoh masa, padamkan cache sekali lagi untuk memadamkan data yang tidak konsisten dalam cache . Bagi masa tertentu, anda perlu menilai anggaran masa perniagaan anda dan menetapkannya mengikut masa ini.
- 4.1 Apa yang perlu dilakukan jika seni bina memisahkan bacaan dan penulisan?
public void write(String key, Object data) { Redis.delKey(key); db.updateData(data); Thread.sleep(1000); Redis.delKey(key); }Jika pangkalan data menggunakan seni bina pemisahan baca-tulis, maka masalah baharu akan timbul, seperti yang ditunjukkan di bawah:
Pada masa ini, dua permintaan datang, minta A (operasi kemas kini ) dan minta B (operasi pertanyaan)
Minta operasi kemas kini, padam Redis
Minta pustaka utama untuk melakukan operasi kemas kini, dan pustaka utama dan pustaka hamba untuk menyegerakkan; data ;
Sila minta B untuk operasi pertanyaan dan mendapati tiada data dalam Redis;
- Pergi dan dapatkan data daripada perpustakaan;
- Pada masa ini, penyegerakan data belum selesai, dan data yang diperolehi Ia adalah data lama
- Penyelesaian pada masa ini adalah untuk menanyakan pangkalan data untuk mengisi data dalam Redis, kemudian memaksanya untuk menunjuk ke pangkalan data utama; untuk pertanyaan.
- Apakah yang perlu saya lakukan jika pemadaman gagal?
Kemas kini pangkalan data dahulu, kemudian padamkan cache
Situasi ini juga akan menyebabkan masalah dikemas kini dengan jayanya, tetapi Jika ralat berlaku semasa peringkat pemadaman cache dan pemadaman tidak berjaya, maka apabila membaca cache sekali lagi pada masa ini, data akan menjadi salah setiap kali. Penyelesaian pada masa ini ialah menggunakan baris gilir mesej untuk mengimbangi pemadaman. Logik perniagaan khusus diterangkan dalam istilah seperti berikut:Minta urutan A untuk mengemas kini pangkalan data dahulu Ralat telah dilaporkan semasa memadam Redis, dan pemadaman gagal;
Pada masa ini, kunci Redis dihantar ke baris gilir mesej sebagai badan mesej
- Sistem memadamkan Redis sekali lagi selepas menerima mesej yang dihantar oleh baris gilir mesej; 🎜 >Tetapi penyelesaian ini akan mempunyai kelemahan, iaitu ia akan menyebabkan banyak pencerobohan ke dalam kod perniagaan dan digabungkan secara mendalam, jadi akan ada kaedah pengoptimuman pada masa ini Kami tahu bahawa pangkalan data Mysql dikemas kini binlog selepas operasi Kita semua boleh mencari operasi yang sepadan, kemudian kita boleh melanggan log binlog pangkalan data Mysql untuk mengendalikan cache.
- Pembelajaran yang disyorkan:
- Tutorial Redis
Atas ialah kandungan terperinci Bagaimana untuk memastikan konsistensi antara cache Redis dan pangkalan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

RedisIsclassifiedasanosqldatabaseBecauseItuseSey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.itoffersspeedandflexibility, makeitidealforreal-timeapplicationsandcaching, ButitmaybesuitiSuScenariscenariscenari

Redis meningkatkan prestasi aplikasi dan skalabiliti dengan data caching, melaksanakan penguncian dan ketekunan data yang diedarkan. 1) Data cache: Gunakan REDIS ke cache data yang sering diakses untuk meningkatkan kelajuan akses data. 2) Kunci yang diedarkan: Gunakan Redis untuk melaksanakan kunci yang diedarkan untuk memastikan keselamatan operasi dalam persekitaran yang diedarkan. 3) Kegigihan data: Memastikan keselamatan data melalui mekanisme RDB dan AOF untuk mencegah kehilangan data.

Model dan struktur data Redis termasuk lima jenis utama: 1. String: Digunakan untuk menyimpan teks atau data binari, dan menyokong operasi atom. 2. Senarai: Koleksi Elemen yang Diarahkan, sesuai untuk beratur dan susunan. 3. Set: unsur -unsur unik yang tidak teratur ditetapkan, menyokong operasi set. 4. Diarahkan Set (SortedSet): Satu set elemen yang unik dengan skor, sesuai untuk kedudukan. 5. Jadual Hash (Hash): Koleksi pasangan nilai utama, sesuai untuk menyimpan objek.

Kaedah pangkalan data Redis termasuk pangkalan data dalam memori dan penyimpanan nilai utama. 1) Redis menyimpan data dalam ingatan, dan membaca dan menulis dengan cepat. 2) Ia menggunakan pasangan nilai utama untuk menyimpan data, menyokong struktur data kompleks seperti senarai, koleksi, jadual hash dan koleksi yang diperintahkan, sesuai untuk pangkalan data cache dan NoSQL.

REDIS adalah penyelesaian pangkalan data yang kuat kerana ia menyediakan prestasi cepat, struktur data yang kaya, ketersediaan dan skalabilitas yang tinggi, keupayaan kegigihan, dan pelbagai sokongan ekosistem. 1) Prestasi yang sangat cepat: Data Redis disimpan dalam ingatan dan mempunyai kelajuan membaca dan menulis yang sangat cepat, sesuai untuk aplikasi kesesuaian yang tinggi dan rendah. 2) Struktur data yang kaya: Menyokong pelbagai jenis data, seperti senarai, koleksi, dan lain -lain, yang sesuai untuk pelbagai senario. 3) Ketersediaan dan skalabilitas yang tinggi: Menyokong replikasi master-hamba dan mod kluster untuk mencapai ketersediaan yang tinggi dan berskala mendatar. 4) Kegigihan dan keselamatan data: Ketekunan data dicapai melalui RDB dan AOF untuk memastikan integriti dan kebolehpercayaan data. 5) Sokongan ekosistem dan komuniti yang luas: dengan ekosistem yang besar dan komuniti aktif,

Ciri -ciri utama Redis termasuk kelajuan, fleksibiliti dan sokongan struktur data yang kaya. 1) Kelajuan: Redis adalah pangkalan data dalam memori, dan membaca dan menulis operasi hampir seketika, sesuai untuk pengurusan cache dan sesi. 2) Fleksibiliti: Menyokong pelbagai struktur data, seperti rentetan, senarai, koleksi, dan lain -lain, yang sesuai untuk pemprosesan data yang kompleks. 3) Sokongan Struktur Data: Menyediakan rentetan, senarai, koleksi, jadual hash, dan lain -lain, yang sesuai untuk keperluan perniagaan yang berbeza.

Fungsi teras Redis adalah sistem penyimpanan dan pemprosesan data berprestasi tinggi. 1) Akses data berkelajuan tinggi: Redis menyimpan data dalam memori dan menyediakan kelajuan membaca dan menulis tahap mikrosecond. 2) Struktur Data Kaya: Menyokong rentetan, senarai, koleksi, dan lain -lain, dan menyesuaikan diri dengan pelbagai senario aplikasi. 3) Kegigihan: Data berterusan ke cakera melalui RDB dan AOF. 4) Menerbitkan langganan: boleh digunakan dalam beratur mesej atau sistem komunikasi masa nyata.

Redis menyokong pelbagai struktur data, termasuk: 1. String, sesuai untuk menyimpan data nilai tunggal; 2. Senarai, sesuai untuk beratur dan susunan; 3. Tetapkan, digunakan untuk menyimpan data yang tidak duplikasi; 4. Diarahkan set, sesuai untuk senarai ranking dan beratur keutamaan; 5. Jadual hash, sesuai untuk menyimpan objek atau data berstruktur.


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

Dreamweaver Mac版
Alat pembangunan web visual

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna