Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis

Bagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis

王林
王林ke hadapan
2023-05-29 15:07:20861semak imbas

1. Penembusan cache

1.1 Penerangan masalah

Penembusan cache adalah untuk meminta kunci yang tidak wujud pada bahagian klien/pelayar tidak ada sumber data dalam pangkalan data Setiap kali permintaan untuk kunci ini tidak dapat diperoleh daripada cache, sumber data akan diminta.

Jika anda menggunakan ID pengguna yang tidak wujud untuk mengakses maklumat pengguna, ia tidak dalam redis mahupun dalam pangkalan data mungkin mengatasi sumber data

Bagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis

<.>1.2 Penyelesaian

Data yang tidak boleh wujud dalam cache dan tidak boleh ditanya Memandangkan cache ditulis secara pasif apabila terdapat kesilapan, cache tidak wujud untuk pertimbangan toleransi kesalahan tidak boleh ditanya tidak akan Caching dalam redis akan menyebabkan pangkalan data diminta setiap kali data yang tidak wujud diminta, kehilangan makna caching.

(1) Jika data yang dikembalikan oleh pertanyaan kosong (tidak kira sama ada data itu tidak wujud), kami masih akan cache hasil kosong (null) dan menetapkan masa tamat tempoh hasil kosong menjadi sangat singkat, paling lama Tidak lebih daripada lima minit

(2) Tetapkan senarai boleh diakses (senarai putih): gunakan jenis peta bit untuk mentakrifkan senarai boleh diakses, id senarai digunakan sebagai offset peta bit, setiap satu akses dan id dalam peta bit Bandingkan, jika id akses tiada dalam peta bit, memintas dan tidak membenarkan akses.

(3) Gunakan penapis Bloom

(4) Menjalankan pemantauan data masa nyata dan mendapati bahawa apabila kadar hit Redis menurun dengan cepat, semak objek akses dan akses data, dan sediakan senarai hitam.

2. Pecahan cache

2.1 Penerangan masalah

Apabila pengguna meminta data untuk kunci sedia ada, data untuk kunci dalam redis adalah lapuk permintaan serentak mendapati bahawa cache telah tamat tempoh, sumber data akan diminta untuk memuatkan data dan dicache dalam redis Pada masa ini, bilangan concurrency yang besar mungkin mengatasi perkhidmatan pangkalan data.

2.2 Penyelesaian

Apabila data kunci tertentu diminta dalam jumlah yang banyak, kunci ini adalah data panas dan perlu dipertimbangkan untuk mengelakkan masalah "pecah".

(1) Pratetapkan data popular: Sebelum redis akses puncak, simpan beberapa data popular ke dalam redis terlebih dahulu dan tingkatkan tempoh utama data popular ini

(2) Pelarasan masa nyata : Pantau data mana yang popular di tapak dan laraskan masa tamat tempoh kunci dalam masa nyata

(3) Gunakan kunci:

  • apabila cache tamat tempoh (nilai yang diambil keluar dinilai kosong), bukannya memuatkan db serta-merta.

  • Mula-mula gunakan beberapa operasi alat caching dengan nilai pulangan operasi yang berjaya (seperti SETNX Redis) untuk menetapkan kunci mutex

  • Apabila operasi kembali berjaya, lakukan operasi load db sekali lagi, tetapkan semula cache, dan akhirnya padamkan kekunci mutex; , dan urutan semasa tidur untuk seketika Masa untuk mencuba semula keseluruhan kaedah get cache.

  • 3. Cache Avalanche

3.1 Penerangan MasalahBagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis

Data yang sepadan wujud, tetapi data utama Mempunyai tamat tempoh (cache redis akan tamat tempoh dan kunci ini akan dipadamkan secara automatik Pada masa ini, sebilangan besar permintaan serentak mengakses kunci yang berbeza, iaitu, sebilangan besar kunci yang berbeza diakses pada masa yang sama. kunci berada dalam peringkat tamat tempoh, dan pangkalan data akan diminta Sebilangan besar permintaan serentak Ia akan mengatasi pelayan pangkalan data Keadaan ini dipanggil cache avalanche.

3.2 Penyelesaian

Kesan runtuhan salji dari ketidaksahihan cache mempunyai kesan yang dahsyat pada sistem asas! Bagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis

(1) Bina seni bina cache berbilang peringkat:

cache nginx + cache redis + cache lain (ehcache, dll.)

  • (2) Gunakan kunci atau baris gilir:

Gunakan kunci atau baris gilir untuk memastikan bahawa tidak akan ada yang besar bilangan pasangan benang Pangkalan data dibaca dan ditulis sekali gus, dengan itu mengelakkan sejumlah besar permintaan serentak daripada jatuh pada sistem storan asas sekiranya berlaku kegagalan. Tidak boleh digunakan untuk situasi konkurensi tinggi

  • (3) Tetapkan bendera tamat tempoh untuk mengemas kini cache:

Rekod sama ada data cache telah tamat tempoh ( Tetapkan jumlah pendahuluan), jika ia tamat tempoh, ia akan mencetuskan pemberitahuan kepada utas lain untuk mengemas kini cache kunci sebenar di latar belakang.

  • (4) Sebarkan masa tamat tempoh cache:

Sebagai contoh, kita boleh berdasarkan masa tamat tempoh asal Tambahkan nilai rawak, seperti rawak 1-5 minit, supaya kadar ulangan setiap masa tamat cache akan dikurangkan, menjadikannya sukar untuk menyebabkan peristiwa kegagalan kolektif.

    Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah biasa caching data berdasarkan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam