Rumah  >  Artikel  >  pangkalan data  >  Apakah situasi penyekatan Redis?

Apakah situasi penyekatan Redis?

王林
王林ke hadapan
2023-05-26 18:16:231512semak imbas

Penyekatan perintah

Menggunakan perintah yang tidak sesuai menyebabkan penyekatan pelanggan:

  • kunci *: Dapatkan semua operasi utama; Hgetall: Mengembalikan jumlah semua medan dalam jadual cincang;

  • smembers: Mengembalikan semua ahli dalam set; kerumitan ialah O(n), dan kadangkala keseluruhan jadual diimbas Apabila n meningkat, kerumitan masa akan meningkat dan pelanggan akan disekat.

  • SAVE blocking
  • Semua orang tahu bahawa apabila Redis mengambil syot kilat RDB, ia akan memanggil fork() fungsi sistem dan mencipta urutan anak untuk melengkapkan penulisan fail sementara dan keadaan pencetus ialah menyimpan konfigurasi dalam fail konfigurasi.

  • Apabila konfigurasi kami dicapai, arahan bgsave akan dicetuskan untuk mencipta syot kilat Kaedah ini tidak akan menyekat utas utama, manakala melaksanakan perintah save secara manual akan dilaksanakan dalam utas utama,
menyekat.

Benang utama.

Kegigihan segerak

Apabila Redis merekodkan log AOF secara langsung, jika terdapat sejumlah besar operasi tulis dan dikonfigurasikan untuk kegigihan segerak

appendfsync always

Iaitu, setiap kali data perubahan berlaku, Ia direkodkan ke cakera serta-merta Kerana menulis ke cakera memakan masa dan mempunyai prestasi yang lemah, ia kadang-kadang menyekat benang utama. Tulis semula AOF

mengeluarkan sub-utas untuk menulis semula fail Apabila melaksanakan perintah

, pelayan Redis akan mengekalkan penimbal tulis semula AOF. penimbal ini akan merekodkan semua arahan tulis yang dilaksanakan oleh pelayan semasa penciptaan fail AOF baharu oleh utas anak.

Apabila urutan kanak-kanak menyelesaikan kerja mencipta fail AOF baharu, pelayan akan menambahkan semua kandungan dalam penimbal tulis semula ke penghujung fail AOF baharu, supaya Fail AOF disimpan Keadaan pangkalan data adalah konsisten dengan keadaan pangkalan data sedia ada.
  • BGREWRITEAOFAkhir sekali, pelayan menggantikan fail AOF lama dengan fail AOF baharu untuk melengkapkan operasi penulisan semula fail AOF.

  • Penyekatan berlaku semasa langkah 2. Apabila menulis data baharu dalam penimbal kepada fail baharu,

    penyekatan
  • akan berlaku.
  • Log AOF

  • Pengelogan AOF tidak merekodkan log sebelum melaksanakan arahan seperti pangkalan data hubungan (untuk memudahkan pemulihan kerosakan), tetapi menggunakan kaedah melaksanakan arahan dahulu dan kemudian merekodkan log.

Alasannya ialah pengelogan AOF tidak melakukan semakan sintaks pada arahan, yang boleh mengurangkan overhed pemeriksaan tambahan dan tidak akan menyekat pelaksanaan perintah semasa, tetapi boleh menyebabkan sekatan kepada operasi seterusnya.

Ini kerana log AOF juga dilaksanakan dalam utas utama

Jika tekanan penulisan cakera tinggi semasa menulis fail log ke cakera, penulisan cakera akan menjadi sangat perlahan, yang akan membawa kepada Operasi seterusnya tidak dapat dilakukan.

Masalah Kunci Besar

Kunci besar tidak bermakna nilai kunci adalah sangat besar, tetapi nilai yang sepadan dengan kunci adalah sangat besar.

Masalah sekatan yang disebabkan oleh kekunci besar adalah seperti berikut:

Sekatan tamat masa pelanggan: Memandangkan arahan pelaksanaan Redis adalah satu-benang, ia akan lebih memakan masa untuk mengendalikan kunci besar , maka Redis akan disekat Dari perspektif pelanggan, tidak akan ada respons untuk masa yang lama.

Menyebabkan kesesakan rangkaian: Setiap kali anda memperoleh kunci besar, trafik rangkaian adalah besar Jika saiz kunci ialah 1 MB dan bilangan lawatan sesaat ialah 1000, maka 1000MB akan dijana trafik sesaat, yang merupakan bencana untuk pelayan dengan kad rangkaian Gigabit biasa.

  • Menyekat urutan pekerja: Jika anda menggunakan del untuk memadamkan kunci besar, urutan pekerja akan disekat, menjadikannya mustahil untuk memproses arahan berikutnya.

  • Cari kunci besar

  • Apabila kita menggunakan parameter
  • yang disertakan dengan Redis untuk mencari kunci besar, adalah lebih baik untuk melaksanakan arahan pada hamba nod kerana Apabila dilaksanakan pada nod induk, ia akan

    menyekat nod induk

    .

Kami juga boleh menggunakan perintah SCAN untuk mencari kunci besar; menggunakan kegigihan RDB Dan menganalisis fail RDB yang sepadan. Terdapat alat siap sedia di Internet:

--bigkeys

redis-rdb-tools: alat yang ditulis dalam bahasa Python untuk menganalisis fail snapshot RDB Redis
  • Alat ini dipanggil rdb_bigkeys dan ditulis dalam bahasa Go Ia boleh digunakan untuk menganalisis fail petikan RDB Redis dan mempunyai prestasi yang lebih tinggi.
  • Padam kekunci besar
    • Intipati operasi pemadaman adalah untuk melepaskan ruang memori yang diduduki oleh pasangan nilai kunci.

      Melepaskan memori hanyalah langkah pertama Untuk mengurus ruang memori dengan lebih cekap, apabila aplikasi mengeluarkan memori,
    • sistem pengendalian perlu memasukkan blok memori yang dikeluarkan ke dalam senarai terpaut blok memori percuma.
    • , untuk pengurusan dan pengagihan semula seterusnya. Proses ini sendiri mengambil sedikit masa dan akan

      menyekat

      aplikasi sedang membebaskan memori.
    Jadi, jika sejumlah besar memori dikeluarkan sekaligus, masa operasi senarai terpaut blok memori percuma akan meningkat, yang akan menyebabkan Redis
benang utama disekat

dengan sewajarnya. Jika utas utama disekat, Semua permintaan lain mungkin tamat masa, dan semakin banyak masa tamat akan menyebabkan sambungan Redis kehabisan dan pelbagai pengecualian berlaku.

Apabila memadamkan kekunci besar, disyorkan untuk menggunakan pemadaman kelompok dan pemadaman tak segerak.

Kosongkan pangkalan data

Mengosongkan pangkalan data adalah sama seperti memadamkan kunci besar di atas dan flushdb juga melibatkan pemadaman dan pelepasan semua pasangan nilai kunci, yang juga merupakan titik penyekat Redis.

Peluasan kluster

Kluster Redis boleh mengembangkan dan mengecilkan nod secara dinamik Proses ini pada masa ini dalam keadaan separa automatik dan memerlukan campur tangan manual.

Semasa pengembangan dan pengecutan, pemindahan data diperlukan. Untuk memastikan ketekalan penghijrahan, Redis melaksanakan semua operasi migrasi sebagai operasi segerak .

Apabila melakukan penghijrahan, Redis di kedua-dua hujungnya akan memasuki keadaan menyekat untuk panjang yang berbeza-beza Untuk kekunci kecil, kali ini boleh diabaikan, tetapi jika penggunaan memori kekunci terlalu besar , serius Kadangkala, failover dalam kelompok akan dicetuskan, menyebabkan penukaran yang tidak perlu.

Atas ialah kandungan terperinci Apakah situasi penyekatan 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