


Mari analisa konsistensi cache Redis, penembusan cache, pecahan cache dan isu salji cache bersama-sama
Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan ketekalan cache, penembusan cache, pecahan cache, salji cache dan penyegerakan tulis bagi data cache. Mari kita lihat isu ketekalan DB Saya harap ia akan membantu semua orang.
Cadangan berkaitan: "Analisis masalah storan kunci panas dalam Redis dan bercakap tentang penyelesaian kepada pengecualian cache"
(1) Masalah konsistensi ketidaksahihan cache
Penggunaan cache am ialah: baca cache dahulu, dan jika ia tidak wujud, baca dari DB, dan kemudian Hasilnya ditulis ke cache pada kali berikutnya data dibaca, data boleh diperolehi terus dari cache. [Cadangan berkaitan: Tutorial Video Redis]
Pengubahsuaian data adalah untuk membatalkan data cache secara langsung, dan kemudian mengubah suai kandungan DB untuk mengelakkan pengubahsuaian DB berjaya, tetapi tembolok data tidak dikosongkan kerana rangkaian atau masalah lain , mengakibatkan data kotor. Tetapi ini masih tidak dapat mengelakkan penjanaan data kotor Dalam senario serentak: Anggapkan bahawa perniagaan mempunyai sejumlah besar permintaan baca dan ubah suai untuk data Key:Hello Value:World. Thread A membaca Key:Hello dari OCS, mendapat hasil Not Found, mula meminta data daripada DB, dan mendapat data Key:Hello Value:World seterusnya, ia bersedia untuk menulis data ini ke OCS, tetapi sebelum menulis ke OCS (network , Menunggu CPU boleh menyebabkan kelajuan pemprosesan thread A menjadi perlahan.) Satu lagi thread B meminta untuk mengubah suai data Key:Hello Value:OCS dan mula-mula melakukan tindakan cache penolakan (kerana thread B tidak tahu sama ada data ini wujud , jadi ia secara langsung melakukan operasi tidak sah). OCS berjaya memproses permintaan yang tidak sah. Kembali ke utas A untuk meneruskan menulis OCS dan tulis Key:Hello Value:World ke dalam cache Tugasan Thread A juga berjaya mengubah suai kandungan data DB kepada Key:Hello Value:OCS. Untuk menyelesaikan masalah ini, OCS telah mengembangkan protokol Memcached (awan awam tidak lama lagi akan menyokongnya) dan menambah antara muka deleteAndIncVersion. Antara muka ini sebenarnya tidak memadamkan data, tetapi melabelkan data untuk menunjukkan bahawa ia telah tamat tempoh, dan meningkatkan nombor versi data jika data tidak wujud, NULL ditulis, dan nombor versi data rawak juga dijana. Penulisan OCS menyokong perbandingan atom nombor versi: dengan mengandaikan nombor versi masuk adalah konsisten dengan nombor versi data yang disimpan oleh OCS atau data asal tidak wujud, penulisan dibenarkan, jika tidak pengubahsuaian ditolak.
Kembali ke tempat kejadian sebentar tadi: Thread A membaca Key:Hello daripada OCS, mendapat hasil Not Found, mula meminta data daripada DB dan mendapatkan data Key:Hello Value:World, kemudian bersedia untuk menulis kepada OCS Untuk sekeping data ini, maklumat nombor versi lalai kepada 1 sebelum A menulis kepada OCS, satu lagi thread B memulakan tindakan untuk mengubah suai data Key:Hello Value:OCS pertama kali melakukan tindakan padam cache permintaan deleteAndIncVersion dan menjana versi rawak No. 12345 (bersetuju lebih besar daripada 1000). Kembali ke utas A dan teruskan menulis kepada OCS, meminta untuk menulis Key:Hello Value:World Pada masa ini, sistem cache mendapati bahawa maklumat nombor versi masuk tidak sepadan (1! = 12345), penulisan gagal dan tugas thread A tamat ;Thread B juga berjaya mengubah suai kandungan data DB kepada Key:Hello Value:OCS.
Pada masa ini, data dalam OCS ialah Key:Hello Value:NULL Version:12345; data dalam DB ialah Key:Hello Value:OCS dalam tugasan baca seterusnya, data dalam DB akan dicuba semula untuk menulis dalam OCS.
(2) Isu penyegerakan tulis data cache dan konsistensi DB
Apabila skala tapak web berkembang dan kebolehpercayaan bertambah baik, ia akan menghadapi penggunaan berbilang IDC. Setiap IDC mempunyai sistem DB dan cache bebas, dan ketekalan cache telah menjadi isu yang menonjol.
Pertama sekali, untuk memastikan kecekapan tinggi, sistem cache akan menghalang IO cakera, walaupun ia menulis BINLOG sudah tentu, demi prestasi, sistem cache hanya boleh memadam secara serentak dan tidak tulis secara serentak, jadi penyegerakan cache secara amnya akan diutamakan daripada ketibaan penyegerakan DB (Lagipun, sistem cache jauh lebih cekap), maka akan ada senario di mana tiada data dalam cache dan data lama dalam DB. Pada masa ini, terdapat permintaan perniagaan untuk data, dan cache baca Tidak Ditemui Data lama yang dibaca daripada DB dan dimuatkan ke dalam cache masih merupakan data lama Apabila penyegerakan data DB tiba, hanya DB yang dikemas kini. dan data kotor yang dicache tidak boleh dibersihkan.
Seperti yang dapat dilihat daripada situasi di atas, punca ketidakkonsistenan ialah sistem heterogen tidak boleh menyegerak secara kolaboratif Ia tidak dapat menjamin bahawa data DB disegerakkan terlebih dahulu dan data cache disegerakkan kemudian. Jadi kita perlu mempertimbangkan bagaimana sistem cache menunggu untuk penyegerakan DB, atau bolehkah kedua-duanya berkongsi mekanisme penyegerakan? Penyegerakan cache juga bergantung pada DB BINLOG yang merupakan penyelesaian yang boleh dilaksanakan.
DB dalam IDC1 disegerakkan kepada DB dalam IDC2 melalui BINLOG Dalam kes ini, pengubahsuaian data IDC2-DB juga akan menjana BINLOGnya sendiri Penyegerakan data cache boleh dilakukan melalui IDC2-DB BINLOG. Selepas modul penyegerakan cache menganalisis BINLOG, ia membatalkan kekunci cache yang sepadan dan menukar penyegerakan daripada selari kepada bersiri, memastikan pesanan itu.
(3) Penembusan cache (DB mengalami trafik pertanyaan yang tidak perlu)
Kaedah 1: Ia adalah penapis Bloom. Ia adalah algoritma probabilistik dan struktur data yang sangat cekap ruang, digunakan untuk menentukan sama ada elemen berada dalam set (serupa dengan Hashset). Terasnya ialah vektor binari panjang dan satu siri fungsi cincang. Laksanakan penapis mekar menggunakan jambu batu Google. 1) Terdapat kadar salah pengiraan Apabila bilangan elemen yang disimpan meningkat, kadar salah pengiraan juga meningkat 2) Dalam keadaan biasa, elemen tidak boleh dipadamkan daripada penapis Bloom 3) Proses menentukan panjang tatasusunan dan bilangan fungsi cincang adalah kompleks, dan pengedaran Apakah senario penggunaan penapis Long? 1) Penapisan alamat spam (bilangan alamat adalah besar) 2) Penyahduplikasi alamat URL Crawler 3) Menyelesaikan masalah pecahan cache
Kaedah 2: Simpan hasil kosong dan tetapkan masa untuk hasil kosong
(4) Cache avalanche (cache ditetapkan pada masa tamat tempoh yang sama, menyebabkan puncak banjir DB)
Kaedah 1: Kebanyakan pereka sistem mempertimbangkan untuk menggunakan kunci atau baris gilir untuk memastikan cache tunggal Benang (proses) menulis untuk mengelakkan sebilangan besar permintaan serentak jatuh pada sistem storan asas semasa kegagalan
Kaedah 2: Nilai rawak masa kegagalan
(5) Pecahan cache ( titik panas) Kunci, longsor kecil yang disebabkan oleh sebilangan besar permintaan baca serentak)
Apabila cache tamat tempoh pada masa tertentu, terdapat sejumlah besar serentak permintaan untuk Kunci ini pada masa ini Permintaan ini Jika didapati bahawa cache telah tamat tempoh, data biasanya akan dimuatkan dari DB bahagian belakang dan ditetapkan semula ke cache Pada masa ini, permintaan serentak yang besar boleh mengatasi dengan serta-merta DB hujung belakang
Kaedah 1: 1. Gunakan cache yang diedarkan Untuk menyokong kunci mutex, tetapkan kunci mutex Apabila operasi kembali berjaya, operasi DB muatkan akan dilakukan dan cache akan diset semula. Dengan kata lain, muatkan DB hanya akan diproses oleh satu utas.
Kaedah 2: Gunakan kunci mutex terlebih dahulu: tetapkan nilai tamat masa (masa tamat1) dalam nilai, tamat masa1 adalah lebih kecil daripada tamat masa memcache sebenar (masa tamat2) Apabila tamat masa1 dibaca daripada cache Apabila anda mendapati ia telah tamat tempoh , teruskan masa tamat1 dan tetapkannya semula ke cache Kemudian muatkan data dari pangkalan data dan tetapkannya ke cache Ini meningkatkan pencerobohan kod perniagaan dan meningkatkan kerumitan pengekodan. Tidak pernah tamat tempoh": Dari perspektif redis, memang tiada masa tamat tempoh ditetapkan, yang memastikan tiada masalah tamat tempoh kunci tempat liputan, iaitu, ia tidak tamat tempoh "secara fizikal". Dari perspektif fungsi, jika ia tidak tamat tempoh. tamat tempoh, maka tidak. Adakah ia statik? Jadi kami menyimpan masa tamat tempoh dalam nilai yang sepadan dengan kunci Jika didapati telah tamat tempoh, cache dibina melalui benang tak segerak, iaitu, tamat tempoh "logik". >
(6) Masalah kepenuhan cache dan kehilangan data biasa dalam sistem cache
Perlu berdasarkan analisis perniagaan tertentu Biasanya kami menggunakan strategi LRU untuk mengendalikan limpahan, dan Redis Strategi kegigihan RDB dan AOF untuk memastikan situasi tertentu
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:Video Pengaturcaraan
!Atas ialah kandungan terperinci Mari analisa konsistensi cache Redis, penembusan cache, pecahan cache dan isu salji cache bersama-sama. 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

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)

Topik panas











Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Pada sistem CentOS, anda boleh mengehadkan masa pelaksanaan skrip LUA dengan mengubah fail konfigurasi REDIS atau menggunakan arahan REDIS untuk mengelakkan skrip jahat daripada memakan terlalu banyak sumber. Kaedah 1: Ubah suai fail konfigurasi Redis dan cari fail konfigurasi Redis: Fail konfigurasi Redis biasanya terletak di /etc/redis/redis.conf. Edit Fail Konfigurasi: Buka fail konfigurasi menggunakan editor teks (seperti Vi atau nano): sudovi/etc/redis/redis.conf Tetapkan had masa pelaksanaan skrip lua: Tambah atau ubah suai baris berikut dalam fail konfigurasi untuk menetapkan masa pelaksanaan maksimum skrip lua (unit: milidor)

Gunakan alat baris perintah redis (redis-cli) untuk mengurus dan mengendalikan redis melalui langkah-langkah berikut: Sambungkan ke pelayan, tentukan alamat dan port. Hantar arahan ke pelayan menggunakan nama arahan dan parameter. Gunakan arahan bantuan untuk melihat maklumat bantuan untuk arahan tertentu. Gunakan perintah berhenti untuk keluar dari alat baris arahan.

Kaunter Redis adalah satu mekanisme yang menggunakan penyimpanan pasangan nilai utama REDIS untuk melaksanakan operasi pengiraan, termasuk langkah-langkah berikut: mewujudkan kekunci kaunter, meningkatkan tuduhan, mengurangkan tuduhan, menetapkan semula, dan mendapatkan tuduhan. Kelebihan kaunter Redis termasuk kelajuan cepat, konkurensi tinggi, ketahanan dan kesederhanaan dan kemudahan penggunaan. Ia boleh digunakan dalam senario seperti pengiraan akses pengguna, penjejakan metrik masa nyata, skor permainan dan kedudukan, dan pengiraan pemprosesan pesanan.

Terdapat dua jenis strategi tamat tempoh data REDIS: Penghapusan berkala: Imbasan berkala untuk memadamkan kunci yang telah tamat tempoh, yang boleh ditetapkan melalui parameter-cap-cap-rempah yang telah tamat tempoh dan parameter kelewatan-cap-remove-time-time. Penghapusan Lazy: Periksa kekunci yang telah tamat tempoh hanya apabila kunci dibaca atau ditulis. Mereka boleh ditetapkan melalui parameter lazon-lazy-expire-expire-expire, lazy-lazy-user-del parameter.

Dalam sistem Debian, panggilan sistem Readdir digunakan untuk membaca kandungan direktori. Jika prestasinya tidak baik, cuba strategi pengoptimuman berikut: Memudahkan bilangan fail direktori: Split direktori besar ke dalam pelbagai direktori kecil sebanyak mungkin, mengurangkan bilangan item yang diproses setiap panggilan readdir. Dayakan Caching Kandungan Direktori: Bina mekanisme cache, kemas kini cache secara teratur atau apabila kandungan direktori berubah, dan mengurangkan panggilan kerap ke Readdir. Cafh memori (seperti memcached atau redis) atau cache tempatan (seperti fail atau pangkalan data) boleh dipertimbangkan. Mengamalkan struktur data yang cekap: Sekiranya anda melaksanakan traversal direktori sendiri, pilih struktur data yang lebih cekap (seperti jadual hash dan bukannya carian linear) untuk menyimpan dan mengakses maklumat direktori
