


Bagaimana untuk memastikan konsistensi antara cache Redis dan pangkalan data
Mar 17, 2022 pm 06:50 PMArtikel 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 出現(xiàn)失敗
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;出現(xiàn)失敗
- 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 出現(xiàn)失敗
dua gambar di atas Sudah dicat.
:
Seperti yang ditunjukkan di atas, cache dipadamkan pertama Kemas kini pangkalan data sekali lagi Kemungkinan masalah dalam 沒有出現(xiàn)失敗時
:
- 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; 沒有出現(xiàn)失敗時
- 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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

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

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

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Pakej lanjutan Laravel yang penting untuk 2024 termasuk: 1 Laraveldebrugbar, yang digunakan untuk memantau dan debug kod; 2. Laraveltelescope, menyediakan pemantauan aplikasi terperinci; 3. Laravelhorizon, menguruskan tugas -tugas redis. Pek pengembangan ini dapat meningkatkan kecekapan pembangunan dan prestasi aplikasi.

Langkah -langkah untuk membina persekitaran Laravel pada sistem operasi yang berbeza adalah seperti berikut: 1.Windows: Gunakan XAMPP untuk memasang PHP dan komposer, konfigurasikan pembolehubah persekitaran, dan pasang Laravel. 2.MAC: Gunakan homebrew untuk memasang PHP dan komposer dan pasang Laravel. 3.Linux: Gunakan Ubuntu untuk mengemas kini sistem, pasang PHP dan komposer, dan pasang Laravel. Perintah dan laluan khusus setiap sistem adalah berbeza, tetapi langkah -langkah teras adalah konsisten untuk memastikan pembinaan lancar persekitaran pembangunan Laravel.

Redis lebih tinggi daripada pangkalan data tradisional dalam senario latency yang tinggi dan rendah, tetapi tidak sesuai untuk pertanyaan kompleks dan pemprosesan transaksi. 1.Redis menggunakan penyimpanan memori, bacaan cepat dan tulis kelajuan, sesuai untuk kesesuaian tinggi dan keperluan latensi yang rendah. 2. Pangkalan data tradisional didasarkan pada cakera, sokongan pertanyaan kompleks dan pemprosesan transaksi, dan mempunyai konsistensi dan ketekunan data yang kuat. 3. Redis sesuai sebagai suplemen atau pengganti pangkalan data tradisional, tetapi ia perlu dipilih mengikut keperluan perniagaan tertentu.

Sistem Linux mengehadkan sumber pengguna melalui perintah ULIMIT untuk mengelakkan penggunaan sumber yang berlebihan. 1.Ulimit adalah arahan shell terbina dalam yang boleh mengehadkan bilangan deskriptor fail (-N), saiz memori (-V), kiraan thread (-u), dan lain-lain, yang dibahagikan kepada had lembut (nilai berkesan semasa) dan had keras (had atas maksimum). 2. Gunakan perintah ULIMIT secara langsung untuk pengubahsuaian sementara, seperti ULIMIT-N2048, tetapi hanya sah untuk sesi semasa. 3. Untuk kesan tetap, anda perlu mengubah suai /etc/security/limits.conf dan fail konfigurasi PAM, dan tambah sessionrequiredpam_limits.so. 4. Perkhidmatan SystemD perlu menetapkan LIM dalam fail unit

Redis terutamanya pangkalan data, tetapi ia lebih daripada sekadar pangkalan data. 1. Sebagai pangkalan data, Redis menyokong kegigihan dan sesuai untuk keperluan berprestasi tinggi. 2. Sebagai cache, Redis meningkatkan kelajuan tindak balas aplikasi. 3. Sebagai broker mesej, REDIS menyokong mod penerbitan-langganan, sesuai untuk komunikasi masa nyata.

Redis melampaui pangkalan data SQL kerana prestasi dan fleksibiliti yang tinggi. 1) Redis mencapai bacaan dan tulis kelajuan yang sangat cepat melalui penyimpanan memori. 2) Ia menyokong pelbagai struktur data, seperti senarai dan koleksi, sesuai untuk pemprosesan data yang kompleks. 3) Model tunggal-threaded memudahkan pembangunan, tetapi konkurensi tinggi mungkin menjadi kesesakan.

Redisisanopen-Source, In-MenoryDataStructureStoreusedasadatabase, Cache, andMessageBroker, ExcellingInspeedandversatility.Iswidelyededforcaching, Real-Timeanalytics, sessionManagement, danSleaderboardsDuetoitssupportorvariousdatastructures

Langkah -langkah untuk membina laman web PHP yang dinamik menggunakan PHPStudy termasuk: 1. Pasang PHPStudy dan mulakan perkhidmatan; 2. Konfigurasi Direktori Root Laman Web dan Sambungan Pangkalan Data; 3. Tulis skrip PHP untuk menghasilkan kandungan dinamik; 4. Debug dan mengoptimumkan prestasi laman web. Melalui langkah -langkah ini, anda boleh membina laman web PHP dinamik yang berfungsi sepenuhnya dari awal.
