Jadual Kandungan
1 Pastikan lapisan cache sentiasa tersedia
2. Komponen penurunan taraf mengehadkan semasa
3. Cache tidak tamat tempoh
4. Optimumkan masa tamat tempoh cache
5. Gunakan kunci mutex untuk membina semula cache
6. Bina semula cache secara asinkron
Rumah pangkalan data Redis Bagaimana untuk menyelesaikan masalah avalanche cache Redis

Bagaimana untuk menyelesaikan masalah avalanche cache Redis

Jun 03, 2023 am 09:46 AM
redis

Lapisan cache membawa sejumlah besar permintaan, melindungi lapisan storan dengan berkesan. Walau bagaimanapun, jika sebilangan besar permintaan tiba di lapisan storan disebabkan oleh sejumlah besar kegagalan cache atau keseluruhan cache tidak dapat menyediakan perkhidmatan, beban pada lapisan storan akan meningkat (sebilangan besar permintaan menanyakan pangkalan data). Ini adalah senario runtuhan cache;

Untuk menyelesaikan runtuhan cache, anda boleh bermula dari perkara berikut:

1 Pastikan lapisan cache sentiasa tersedia

Gunakan Redis mod sentri atau Redis Dalam kaedah penempatan kelompok, walaupun nod Redis individu pergi ke luar talian, keseluruhan lapisan cache masih boleh digunakan. Selain itu, Redis boleh digunakan dalam berbilang bilik komputer, supaya walaupun bilik komputer ranap, lapisan cache masih boleh didapati dengan sangat baik.

2. Komponen penurunan taraf mengehadkan semasa

Kedua-dua lapisan cache dan lapisan storan akan mempunyai kebarangkalian ralat, dan ia boleh dianggap sebagai sumber. Sebagai sistem teragih dengan jumlah konkurensi yang besar, jika sumber tidak tersedia, ia boleh menyebabkan pengecualian apabila semua urutan memperoleh sumber ini, menyebabkan keseluruhan sistem menjadi tidak tersedia. Turun taraf adalah sangat biasa dalam sistem konkurensi tinggi Contohnya, dalam perkhidmatan pengesyoran, jika perkhidmatan pengesyoran diperibadikan tidak tersedia, anda boleh menurunkan taraf untuk menambah data tempat liputan supaya keseluruhan perkhidmatan pengesyoran tidak akan tersedia. Komponen degradasi mengehadkan arus biasa termasuk Hystrix, Sentinel, dsb.

3. Cache tidak tamat tempoh

Kunci yang disimpan dalam Redis tidak akan tamat tempoh, jadi tidak akan ada masalah sebilangan besar cache tidak sah pada masa yang sama, tetapi yang berikut ialah bahawa Redis memerlukan lebih banyak ruang storan.

4. Optimumkan masa tamat tempoh cache

Apabila mereka bentuk cache, pilih masa tamat tempoh yang sesuai untuk setiap kunci untuk mengelakkan sejumlah besar kunci menjadi tidak sah pada masa yang sama, menyebabkan runtuhan cache.

5. Gunakan kunci mutex untuk membina semula cache

Dalam senario serentak tinggi, untuk mengelakkan sejumlah besar permintaan mencapai lapisan storan untuk menanyakan data dan membina semula cache pada masa yang sama , anda boleh menggunakan kawalan kunci mutex, seperti mengikut Kekunci pergi ke lapisan cache untuk menanyakan data Apabila lapisan cache dipukul, kunci dikunci, kemudian data ditanya dari lapisan storan, data ditulis. ke lapisan cache, dan akhirnya kunci dilepaskan. Jika benang lain mendapati bahawa memperoleh kunci gagal, biarkan benang tidur untuk satu tempoh masa dan cuba lagi. Mengenai jenis kunci, jika anda berada dalam persekitaran yang berdiri sendiri, anda boleh menggunakan Lock di bawah pakej serentak Java Jika anda berada dalam persekitaran teragih, anda boleh menggunakan kunci teragih (kaedah SETNX dalam Redis).

Pseudokod cache pembinaan semula kunci Mutex dalam persekitaran teragih

/**
 * 互斥锁建立缓存
 *
 **/
public String get(String key) {
   // redis中查询key对应的value
   String value = redis.get(key);
   // 缓存未命中
   if (value == null) {
      // 互斥锁
      String key_mutex_lock = "mutex:lock" + key; 
      // 互斥锁加锁成功
      if(redis.setnx(key_mutex_lock,"1")) { // 返回 0(false),1(true)
          try {
              // 设置互斥锁超时时间,这里设置的是锁的失效时间,而不是key的失效时间
              redis.expire(key_mutex_lock,3*60);
              // 从数据库查询
              value = db.get(key);
              // 数据写入缓存
              redis.set(key,value);
            
          } finally {
               // 释放锁
              boolean keyExist = jedis.exists(key_mutex_lock);
              if(keyExist){
                  redis.delete(key_mutex_lock);
               }
      } else { 
              // 加锁失败,线程休息50ms后重试
               Thread.sleep(50);
               return get(key); // 直接返回缓存结果  
     }
   }
}
Salin selepas log masuk

Kunci teragih Redis digunakan untuk melaksanakan pembinaan semula cache dalam persekitaran teragih Kelebihannya ialah idea reka bentuk adalah mudah dan ketekalan data dijamin ; Kelemahannya ialah kerumitan kod meningkat dan boleh menyebabkan pengguna menunggu. Andaikan bahawa di bawah konkurensi tinggi, kunci dikunci semasa pembinaan semula cache. Jika pada masa ini terdapat 1,000 permintaan serentak, 999 daripadanya disekat, yang akan menyebabkan 999 permintaan pengguna disekat dan menunggu.

6. Bina semula cache secara asinkron

Dalam skema ini, strategi tak segerak digunakan untuk membina cache akan diperoleh daripada kumpulan benang untuk membina cache secara tidak segerak, supaya semua permintaan tidak akan mencapai storan secara langsung, setiap kunci Redis dalam penyelesaian ini mengekalkan masa tamat logik apabila tamat masa logik adalah kurang daripada masa semasa, ini bermakna cache semasa telah tamat tempoh dan cache harus dikemas kini bahawa cache semasa belum tamat tempoh dan nilai dalam cache dikembalikan secara langsung. Sebagai contoh, dalam Redis, masa tamat tempoh kunci ditetapkan kepada 60 minit, dan masa tamat tempoh logik dalam nilai yang sepadan ditetapkan kepada 30 minit. Dengan cara ini, apabila kunci mencapai masa tamat tempoh logik selama 30 minit, cache kunci ini boleh dikemas kini secara tidak segerak, tetapi semasa tempoh mengemas kini cache, cache lama masih tersedia. Kaedah pembinaan semula cache tak segerak ini berkesan boleh menghalang sejumlah besar kunci daripada menjadi tidak sah pada masa yang sama.

rreeee

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

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 membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

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.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

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.

Cara menggunakan perintah redis Cara menggunakan perintah redis Apr 10, 2025 pm 08:45 PM

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Cara menggunakan kunci redis Cara menggunakan kunci redis Apr 10, 2025 pm 08:39 PM

Menggunakan REDIS untuk mengunci operasi memerlukan mendapatkan kunci melalui arahan SETNX, dan kemudian menggunakan perintah luput untuk menetapkan masa tamat tempoh. Langkah-langkah khusus adalah: (1) Gunakan arahan SETNX untuk cuba menetapkan pasangan nilai utama; (2) Gunakan perintah luput untuk menetapkan masa tamat tempoh untuk kunci; (3) Gunakan perintah DEL untuk memadam kunci apabila kunci tidak lagi diperlukan.

Cara membaca kod sumber redis Cara membaca kod sumber redis Apr 10, 2025 pm 08:27 PM

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara menggunakan baris arahan redis Cara menggunakan baris arahan redis Apr 10, 2025 pm 10:18 PM

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.

Cara menyelesaikan kehilangan data dengan redis Cara menyelesaikan kehilangan data dengan redis Apr 10, 2025 pm 08:24 PM

Kerugian data REDIS termasuk kegagalan memori, gangguan kuasa, kesilapan manusia, dan kegagalan perkakasan. Penyelesaiannya adalah: 1. 2. Salin ke beberapa pelayan untuk ketersediaan tinggi; 3. Ha dengan redis sentinel atau cluster redis; 4. Buat gambar untuk membuat sandaran data; 5. Melaksanakan amalan terbaik seperti kegigihan, replikasi, gambar, pemantauan, dan langkah -langkah keselamatan.

See all articles