Rumah  >  Artikel  >  pangkalan data  >  Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

青灯夜游
青灯夜游ke hadapan
2021-09-26 19:53:211550semak imbas

Artikel ini menyusun dan berkongsi beberapa soalan wawancara Redis frekuensi tinggi dengan anda, dan membawa anda melalui mata pengetahuan teras Redis, yang melibatkan struktur data, model memori, model IO, RDB berterusan, dll. Saya harap ia akan membantu kepada awak!

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Mengapa Redis begitu pantas?

Ramai orang hanya tahu bahawa ia adalah pangkalan data dalam memori K/V NoSQl, satu benang... Ini kerana mereka tidak memahami Redis sepenuhnya dan tidak boleh terus bertanya lebih banyak soalan.

Soalan ini adalah pemahaman asas Kami boleh melaksanakannya daripada struktur data asas jenis data yang berbeza dalam Redis, sepenuhnya berdasarkan memori, model rangkaian pemultipleksan IO, model benang, rehash progresif...

Berapa cepat?

Pertama-tama kita boleh bercakap tentang kelajuannya Menurut data rasmi, QPS Redis boleh mencapai kira-kira 100,000 (permintaan sesaat boleh merujuk kepada program penanda aras rasmi "Seberapa pantas Redis? " 》, alamat: redis.io/topics/benc…

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Paksi mendatar ialah bilangan sambungan dan paksi menegak ialah QPS.

Gambar ini menggambarkan susunan magnitud, ia membuatkan penemuduga merasakan anda telah membaca dokumen rasmi, yang sangat ketat.

Pelaksanaan berasaskan memori

Redis ialah pangkalan data berasaskan memori Berbanding dengan pangkalan data cakera, ia mengalahkan kelajuan cakera sepenuhnya.

Kedua-dua operasi baca dan tulis selesai dalam ingatan Mari kita bandingkan perbezaan antara operasi memori dan operasi cakera masing-masing.

Panggilan cakera

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Operasi memori

Memori dikawal secara langsung oleh CPU , juga Ia adalah pengawal memori yang disepadukan di dalam CPU, jadi memori disambungkan terus ke CPU dan menikmati lebar jalur yang optimum untuk komunikasi dengan CPU.

Akhir sekali, gambar digunakan untuk mengukur pelbagai kelewatan sistem (sebahagian daripada data dipetik daripada Brendan Gregg)

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Struktur data yang cekap

Semasa saya belajar MySQL, saya tahu bahawa struktur data B Tree digunakan untuk meningkatkan kelajuan perolehan semula, jadi kelajuan pantas Redis juga harus dikaitkan dengan struktur data.

Redis mempunyai sejumlah 5 jenis data, String、List、Hash、Set、SortedSet.

Jenis data yang berbeza disokong oleh satu atau lebih struktur data di bahagian bawah, untuk mengejar kelajuan yang lebih pantas.

Mesej daripada Saudara Ma: Kami boleh menerangkan kelebihan struktur data asas bagi setiap jenis data secara berasingan Ramai orang hanya mengetahui jenis data, dan memberitahu struktur data asas boleh membuat mata orang bersinar.

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Kelebihan rentetan dinamik mudah SDS

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

  • SDS medium len save this The panjang rentetan, kerumitan masa O(1) untuk menanyakan maklumat panjang rentetan.

  • Pra-peruntukan ruang: Selepas SDS diubah suai, program ini bukan sahaja akan memperuntukkan ruang yang diperlukan untuk SDS, tetapi juga memperuntukkan ruang tambahan yang tidak digunakan.

  • Pelepasan ruang malas: Apabila memendekkan SDS, program tidak akan menuntut semula ruang memori yang berlebihan, tetapi menggunakan medan bebas untuk merekodkan bilangan bait dan tidak melepaskannya kemudian operasi tambah diperlukan, ruang yang tidak digunakan dalam percuma digunakan secara langsung, mengurangkan peruntukan memori.

zipList senarai mampat

Senarai termampat ialah salah satu pelaksanaan asas bagi tiga jenis data Senarai, cincang dan Set yang diisih.

Apabila senarai hanya mempunyai sejumlah kecil data, dan setiap item senarai adalah sama ada nilai integer kecil atau rentetan yang agak pendek, maka Redis akan menggunakan senarai termampat sebagai pelaksanaan asas kekunci senarai.

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Dengan cara ini ingatan padat dan menjimatkan memori.

senarai pantas

Versi seterusnya telah mengubah struktur data senarai, menggunakan senarai pantas dan bukannya senarai zip dan senarai terpaut.

Senarai Pantas ialah gabungan senarai zip dan senarai terpaut. Ia membahagikan senarai terpaut kepada segmen Setiap segmen menggunakan senarai zip untuk storan padat dan berbilang senarai zip disambungkan bersama menggunakan penunjuk dua arah.

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

skipList Skip List

Fungsi pengisihan jenis set diisih dilaksanakan melalui struktur data "senarai langkau".

Senarai langkau ialah struktur data tersusun yang mengekalkan berbilang penunjuk ke nod lain dalam setiap nod untuk mencapai tujuan mengakses nod dengan cepat.

Senarai langkau menambah indeks berbilang peringkat berdasarkan senarai terpaut Melalui beberapa lompatan dalam kedudukan indeks, data boleh diletakkan dengan cepat, seperti yang ditunjukkan dalam rajah di bawah:

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Tatasusunan integer (inset)

Apabila set hanya mengandungi elemen bernilai integer, dan bilangan elemen dalam set ini tidak besar, Redis akan menggunakan set integer sebagai pelaksanaan asas kunci yang ditetapkan untuk menjimatkan memori.

Model benang tunggal

Mesej daripada Abang Ma: Kita perlu ambil perhatian bahawa utas tunggal Redis merujuk kepada IO rangkaian

Redis (IO rangkaian selepas versi 6.x Menggunakan multi-threading) dan arahan pasangan nilai kunci membaca dan menulis dilaksanakan oleh satu utas. Kegigihan redis, penyegerakan data kelompok, pemadaman tak segerak, dll. semuanya dilaksanakan oleh urutan lain.

Jangan katakan bahawa Redis hanya mempunyai satu utas.

Berbenang tunggal bermaksud pelaksanaan arahan baca dan tulis pasangan nilai kunci Redis adalah berbenang tunggal.

Izinkan saya bercakap tentang jawapan rasmi dahulu, yang membuatkan orang ramai berasa cukup ketat, bukannya hanya membaca beberapa blog berdasarkan apa yang orang lain katakan.

Jawapan rasmi: Oleh kerana Redis ialah operasi berasaskan memori, CPU bukanlah kesesakan Redis Kemungkinan besar adalah saiz memori mesin atau saiznya jalur lebar rangkaian. Memandangkan single-threading mudah dilaksanakan dan CPU tidak akan menjadi hambatan, adalah logik untuk menggunakan penyelesaian single-threading. Alamat asal: redis.io/topics/faq.

Mengapa tidak menggunakan pelaksanaan berbilang benang untuk menggunakan CPU sepenuhnya?

Sebelum menjalankan setiap tugas, CPU perlu mengetahui di mana tugas itu dimuatkan dan mula dijalankan. Iaitu, sistem memerlukan bantuan untuk menyediakan daftar CPU dan kaunter program terlebih dahulu, yang dipanggil konteks CPU.

Apabila menukar konteks, kita perlu menyelesaikan satu siri kerja, yang merupakan operasi yang sangat memakan sumber.

Memperkenalkan pembangunan berbilang benang memerlukan penggunaan primitif penyegerakan untuk melindungi pembacaan dan penulisan serentak sumber yang dikongsi, meningkatkan kerumitan kod dan kesukaran penyahpepijatan.

Apakah faedah benang tunggal?

Tiada penggunaan prestasi yang disebabkan oleh penciptaan benang; >
    Avoid It menghapuskan isu persaingan antara benang, seperti menambah kunci, melepaskan kunci, kebuntuan, dsb., dan tidak perlu mempertimbangkan pelbagai isu kunci.
  1. Kod lebih jelas dan logik pemprosesan adalah mudah.
  2. Model pemultipleksan I/O
  3. Redis menggunakan teknologi pemultipleksan I/O untuk memproses sambungan secara serentak. Rangka kerja acara mudah yang dilaksanakan oleh epoll sendiri digunakan.
Membaca, menulis, menutup dan menyambung dalam epoll semuanya ditukar kepada peristiwa, dan kemudian ciri pemultipleksan epoll digunakan untuk tidak membuang masa pada IO.

Benang Redis tidak akan menyekat pada pendengaran tertentu atau soket yang disambungkan, iaitu, ia tidak akan menyekat pada atasan pemprosesan permintaan pelanggan tertentu. Disebabkan ini, Redis boleh menyambung kepada berbilang pelanggan pada masa yang sama dan memproses permintaan, sekali gus meningkatkan keselarasan.

Kamus cincang global RedisPerkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Redis secara keseluruhan ialah jadual cincang untuk menyimpan semua pasangan nilai kunci, tanpa mengira jenis data. Jadual cincang pada asasnya ialah tatasusunan, dan setiap elemen dipanggil baldi cincang Tanpa mengira jenis data, entri dalam setiap baldi memegang penunjuk kepada nilai khusus sebenar.

Kerumitan masa jadual cincang ialah O(1). Anda hanya perlu mengira nilai cincang setiap kunci untuk mengetahui kedudukan dan kedudukan baldi cincang yang sepadan . Entri dalam baldi mencari data yang sepadan, yang juga merupakan salah satu sebab mengapa Redis pantas.

Redis menggunakan objek (redisObject) untuk mewakili nilai utama dalam pangkalan data Apabila kami mencipta pasangan nilai kunci dalam Redis, sekurang-kurangnya dua objek dibuat sebagai objek utama pasangan kunci-nilai. Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Iaitu, setiap entri menyimpan objek redisObject "pasangan nilai kunci", dan data yang sepadan ditemui melalui penunjuk redisObject.

Apa yang perlu dilakukan jika terdapat konflik Hash?

Redis menyelesaikan konflik melalui

pencincangan rantai
typedef struct redisObject{
    //类型
   unsigned type:4;
   //编码
   unsigned encoding:4;
   //指向底层数据结构的指针
   void *ptr;
    //...
 }robj;
:

iaitu, elemen dalam baldi yang sama disimpan menggunakan senarai terpaut

. Walau bagaimanapun, apabila senarai terpaut terlalu panjang, prestasi carian mungkin merosot Oleh itu, untuk mengejar kelajuan, Redis menggunakan dua jadual cincang global. Digunakan untuk operasi cincang untuk menambah bilangan baldi cincang sedia ada dan mengurangkan konflik cincang.

Mulakan secara lalai menggunakan "jadual cincang 1" untuk menyimpan data pasangan nilai kunci dan "jadual cincang 2" tidak mempunyai ruang yang diperuntukkan pada masa ini. Apabila semakin banyak data mencetuskan operasi rehash, lakukan operasi berikut:

  1. Peruntukkan lebih banyak ruang untuk "jadual cincang 2";
  2. Peta semula dan salin data "jadual cincang 1" kepada "jadual cincang 2"; jadual hash 1.
Perlu diperhatikan bahawa proses pemetaan semula data dalam jadual cincang 1 kepada jadual cincang 2 bukanlah proses sekali Ini akan menyebabkan Redis menyekat dan tidak dapat menyediakan perkhidmatan.

Sebaliknya,

semula progresif

digunakan Setiap kali permintaan pelanggan diproses, ia bermula dari indeks pertama dalam "jadual cincang 1" dan menukar Semua data disalin ke. "jadual cincang 2", dan cincang semula disebarkan kepada berbilang permintaan untuk mengelakkan sekatan yang memakan masa. Bagaimana Redis mencapai kegigihan? Bagaimana untuk memulihkan data selepas kemalangan?

Kegigihan data Redis menggunakan kaedah "gambar data RDB" untuk mencapai pemulihan pantas daripada masa henti. Walau bagaimanapun, melaksanakan syot kilat data penuh terlalu kerap akan mempunyai dua overhed prestasi yang serius:

Kerap menjana fail RDB dan menulisnya ke cakera akan menyebabkan tekanan cakera yang berlebihan. Nampaknya RDB sebelumnya belum dilaksanakan lagi, dan yang seterusnya mula dijana semula, jatuh ke dalam gelung tak terhingga.
  1. Keluar daripada sub-proses bgsave akan menyekat utas utama Semakin besar memori utas utama, semakin lama masa penyekatan.
  2. Jadi Redis juga mereka bentuk log pasca tulis AOF untuk merekodkan arahan untuk mengubah suai memori.

Penemuduga: Apakah petikan memori RDB?

Semasa Redis melaksanakan arahan "tulis", data memori akan terus berubah. Petikan memori yang dipanggil merujuk kepada data status data dalam memori Redis pada masa tertentu.

Masa seperti membeku pada saat tertentu Apabila kita mengambil gambar, kita boleh merakam detik itu sepenuhnya melalui foto itu.

Redis adalah serupa dengan ini, ia menangkap data pada masa tertentu dalam bentuk fail dan menulisnya ke cakera. Fail syot kilat ini dipanggil

Fail RDB ialah singkatan daripada Redis DataBase.

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!Apabila melakukan pemulihan data, baca fail RDB terus ke dalam memori untuk melengkapkan pemulihan.

Penemuduga: Semasa penjanaan RDB, bolehkah Redis mengendalikan permintaan tulis pada masa yang sama?

Ya, Redis menggunakan pelbagai proses sistem pengendalian
teknologi salin atas tulis COW (Copy On Write)

untuk mencapai ketekalan syot kilat dan memastikan ketekalan data. Redis akan memanggil fungsi glibc

untuk menjana proses anak semasa kegigihan Gambaran kegigihan dikendalikan sepenuhnya oleh proses anak dan proses induk terus memproses permintaan pelanggan.

forkApabila utas utama melaksanakan perintah tulis untuk mengubah suai data, salinan data akan dibuat

Proses kanak-kanak membaca data salinan dan menulisnya ke fail RDB.

bgsaveIni bukan sahaja memastikan integriti syot kilat, tetapi juga membenarkan urutan utama mengubah suai data pada masa yang sama, mengelakkan sebarang kesan terhadap perniagaan biasa.

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Penemuduga: Jadi apakah AOF?

Log AOF merekodkan semua urutan arahan yang diubah suai sejak penciptaan tika Redis Kemudian ia boleh dipulihkan dengan melaksanakan semua arahan secara berurutan pada contoh Redis kosong, iaitu, "memainkan semula". keadaan struktur data memori bagi contoh semasa Redis.

Item konfigurasi AOF yang disediakan oleh Redis

Strategi tulis balik secara langsung menentukan kecekapan dan keselamatan fungsi kegigihan AOF.

appendfsync

    sentiasa
  • : Tulis balik segerak, kandungan dalam penimbal akan dipadamkan ke fail AOF sejurus selepas arahan tulis dilaksanakan. aof_buf
  • everysec
  • : Tulis semula setiap saat Selepas arahan tulis dilaksanakan, log hanya akan ditulis ke penimbal fail AOF dan kandungan penimbal akan disegerakkan ke cakera setiap saat. .
  • tidak:
  • Dikawal oleh sistem pengendalian, selepas pelaksanaan tulis selesai, log ditulis ke penimbal memori fail AOF, dan sistem pengendalian memutuskan masa untuk membuangnya ke cakera .
  • Tiada strategi terbaik dari kedua-dua dunia, kita perlu membuat pertukaran antara prestasi dan kebolehpercayaan.

Penemuduga: Memandangkan RDB mempunyai dua masalah prestasi, mengapa tidak menggunakan AOF.

Log pratulis AOF merekodkan setiap operasi arahan "tulis". Ia tidak akan menyebabkan kehilangan prestasi seperti petikan penuh RDB, tetapi kelajuan pelaksanaan tidak sepantas RDB Pada masa yang sama, fail log yang terlalu besar juga akan menyebabkan masalah prestasi.

Oleh itu, Redis telah mereka bentuk "mekanisme penulisan semula AOF" yang mematikan Redis menyediakan perintah

untuk mengurangkan log AOF.

bgrewriteaofPrinsipnya adalah untuk membuka sub-proses untuk melintasi memori dan menukarnya kepada satu siri arahan operasi Redis, yang disiri menjadi fail log AOF baharu. Selepas bersiri selesai, log AOF tambahan yang berlaku semasa operasi dilampirkan pada fail log AOF baharu Selepas penambahan selesai, fail log AOF lama digantikan dengan serta-merta, dan kerja pelangsingan selesai.

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Penemuduga: Bagaimana untuk mencapai kehilangan data sesedikit mungkin sambil mengambil kira prestasi?

Apabila memulakan semula Redis, kami jarang menggunakan rdb untuk memulihkan keadaan memori kerana sejumlah besar data akan hilang. Kami biasanya menggunakan main semula log AOF, tetapi prestasi main semula log AOF jauh lebih perlahan daripada RDB, jadi apabila kejadian Redis besar, ia mengambil masa yang lama untuk dimulakan.

Untuk menyelesaikan masalah ini, Redis 4.0 membawa pilihan kegigihan baharu - Kegigihan hibrid. Simpan kandungan fail rdb bersama-sama dengan fail log AOF tambahan. Log AOF di sini bukan lagi log penuh, tetapi log AOF tambahan yang berlaku dalam tempoh dari awal kegigihan hingga akhir kegigihan Biasanya bahagian log AOF ini sangat kecil.

Jadi

Apabila Redis dimulakan semula, anda boleh memuatkan kandungan rdb dahulu, dan kemudian memainkan semula log AOF tambahan, yang boleh menggantikan main semula fail penuh AOF sebelumnya sepenuhnya, dan kecekapan mulakan semula sangat dipertingkatkan.

Penyegerakan data seni bina tuan-hamba Redis

Redis menyediakan mod tuan-hamba, yang menyalin salinan data yang berlebihan ke pelayan Redis lain melalui replikasi tuan-hamba.

Penemuduga: Bagaimana untuk memastikan konsistensi data antara tuan dan hamba?

Untuk memastikan ketekalan data replika, seni bina tuan-hamba menggunakan kaedah pemisahan baca-tulis.

    Kendalian baca: boleh dilaksanakan oleh kedua-dua perpustakaan induk dan hamba;

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!Penemuduga: Adakah replikasi tuan-hamba mempunyai fungsi lain?

Pemulihan kegagalan: apabila nod induk turun, nod lain masih boleh menyediakan perkhidmatan
    Pengimbangan beban: nod Induk menyediakan perkhidmatan tulis, dan nod Hamba menyediakan; baca perkhidmatan untuk berkongsi tekanan ;
  1. Asas ketersediaan tinggi: Ia adalah asas untuk pelaksanaan sentinel dan kelompok, dan asas ketersediaan tinggi.
  2. Penemuduga: Bagaimanakah replikasi tuan-hamba dilaksanakan?

Penyegerakan terbahagi kepada tiga situasi:

Salinan penuh pertama perpustakaan tuan-hamba; -slave;

    Rangkaian antara pangkalan data tuan dan hamba diputuskan dan disambungkan semula untuk penyegerakan.
  1. Penemuduga: Bagaimana untuk mencapai penyegerakan pertama?
Proses salinan pertama perpustakaan tuan-hamba boleh dibahagikan secara kasar kepada tiga peringkat: peringkat penubuhan sambungan (iaitu peringkat penyediaan), peringkat penyegerakan data daripada perpustakaan induk ke pustaka hamba, dan menghantar data baharu semasa penyegerakan Tulis arahan ke peringkat perpustakaan hamba

Tetapkan sambungan:

Hamba. perpustakaan akan mewujudkan sambungan dengan perpustakaan utama, melaksanakan replika daripada perpustakaan hamba dan menghantar Perintah psync dan memberitahu perpustakaan utama bahawa penyegerakan akan berlaku Selepas perpustakaan utama mengesahkan balasan, penyegerakan antara perpustakaan induk dan hamba akan bermula

. 1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Pustaka induk menyegerakkan data ke pustaka hamba: induk melaksanakan perintah
    untuk menjana fail RDB dan menghantar fail ke pustaka hamba Pada masa yang sama,
  1. pustaka utama membuka penimbal replikasi untuk setiap hamba Kawasan merekodkan semua arahan tulis yang diterima sejak fail RDB dijana. Simpan RDB daripada pustaka, kosongkan pangkalan data, dan kemudian muatkan data RDB ke dalam memori.
  2. Hantar arahan tulis baharu yang diterima selepas RDB ke pustaka hamba: operasi tulis selepas menjana fail RDB tidak direkodkan dalam fail RDB sebentar tadi untuk memastikan ketekalan data perpustakaan induk-hamba , perpustakaan induk Penampan replikasi akan digunakan dalam ingatan untuk merekod semua operasi tulis selepas fail RDB dijana. Dan hantar data ke dalam kepada hamba.
  3. bgsavePenemuduga: Apakah yang perlu saya lakukan jika rangkaian antara pangkalan data tuan dan hamba terputus? Adakah saya perlu menyalin kelantangan penuh sekali lagi selepas memutuskan sambungan?
  4. Sebelum Redis 2.8, jika perpustakaan tuan-hamba mengalami gangguan rangkaian semasa penyebaran arahan, perpustakaan hamba akan melakukan salinan penuh dengan perpustakaan induk sekali lagi, yang sangat mahal.
Bermula dari Redis 2.8, selepas rangkaian diputuskan sambungan, pustaka induk-hamba akan menggunakan replikasi tambahan untuk meneruskan penyegerakan.

Replikasi tambahan:
Digunakan untuk replikasi selepas gangguan rangkaian dan situasi lain Hanya arahan tulis yang dilaksanakan oleh nod induk semasa gangguan dihantar ke nod hamba, yang lebih cekap daripada replikasi penuh.

Rahsia memutuskan sambungan dan menyambung semula replikasi tambahan ialah penimbal

Tidak kira bila, induk akan merekodkan operasi arahan tulis dalam

Kerana memori terhad,

adalah tetap Tatasusunan bulat panjang, jika kandungan tatasusunan penuh, kandungan sebelumnya akan ditimpa dari awal .

Tuan menggunakan repl_backlog_buffer untuk merekodkan kedudukan mengimbangi yang telah ditulisnya, dan hamba menggunakan repl_backlog_buffer untuk merekodkan mengimbangi yang telah dibacanya. repl_backlog_buffer

Apabila tuan-hamba memutuskan sambungan dan menyambung semula, hamba akan mula-mula menghantar perintah pync kepada tuan, dan pada masa yang sama menghantar sendiri master_repl_offset, slave_repl_offset kepada tuan.

master hanya perlu menyegerakkan arahan antara 1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras! dan

ke pustaka hamba.

Proses pelaksanaan salinan tambahan adalah seperti berikut:

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Penemuduga: Selepas penyegerakan penuh selesai, bagaimana hendak menyegerakkan data semasa operasi biasa?

Apabila pustaka induk-hamba melengkapkan replikasi penuh, sambungan rangkaian akan dikekalkan di antara mereka Pustaka induk akan menyegerakkan operasi arahan berikutnya yang diterima satu demi satu ke pustaka hamba melalui sambungan ini proses Juga dikenali sebagai penyebaran arahan berdasarkan sambungan panjang, tujuan menggunakan sambungan panjang adalah untuk mengelakkan overhed yang disebabkan oleh penubuhan sambungan yang kerap.

Soal Jawab Prinsip Sentinel

Penemuduga: Pasti, saya tahu banyak, adakah anda tahu Prinsip Kelompok Sentinel?

Sentinel ialah mod pengendalian Redis Ia memfokuskan pada memantau status jalan kejadian Redis (nod induk, nod hamba), dan boleh melepasi satu siri operasi apabila nod induk gagal. . Mekanisme merealisasikan pemilihan induk dan penukaran induk-hamba, merealisasikan failover, dan memastikan ketersediaan keseluruhan sistem Redis .

Rajah seni binanya adalah seperti berikut:

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Redis Sentinel mempunyai keupayaan berikut:

  • Memantau : Pantau secara berterusan sama ada tuan dan hamba berada dalam keadaan kerja yang dijangkakan.
  • Tukar pangkalan data induk secara automatik: Apabila induk gagal, Sentinel memulakan proses pemulihan kegagalan automatik: pilih salah satu hamba sebagai induk baharu.
  • Pemberitahuan: Biarkan hamba melaksanakan replika untuk menyegerakkan dengan tuan baharu dan maklumkan kepada pelanggan untuk mewujudkan sambungan dengan tuan baharu.

Penemu bual: Bagaimanakah pengawal mengenali antara satu sama lain?

Sentinel menjalin komunikasi dengan tuan dan menggunakan mekanisme penerbitan/langganan yang disediakan oleh tuan untuk menerbitkan maklumatnya sendiri, seperti ketinggian dan berat, sama ada anda bujang, IP, port...

Tuan mempunyai __sentinel__:hello Saluran khusus untuk menerbitkan dan melanggan mesej antara pengawal. Ini seperti __sentinel__:hello kumpulan WeChat Sentinels menggunakan kumpulan WeChat yang ditubuhkan oleh tuan untuk menyiarkan berita mereka sendiri, dan pada masa yang sama mengikuti berita yang disiarkan oleh pengawal lain .

Penemuduga: Walaupun pengawal telah menjalinkan hubungan antara satu sama lain, mereka masih perlu menjalinkan hubungan dengan hamba jika tidak, mereka tidak boleh dipantau.

Kuncinya ialah menggunakan tuan untuk mencapainya. Pengawal menghantar perintah INFO kepada tuannya secara semula jadi mengenali semua saudara salve di bawah mazhabnya. Jadi selepas tuan menerima arahan, ia memberitahu penjaga senarai hamba.

Sentinel mewujudkan sambungan dengan setiap hamba berdasarkan maklumat senarai hamba yang dijawab oleh tuan dan terus memantau sentinel berdasarkan sambungan ini.

1Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Cluster Cluster Cannon

Penemuduga: Selain sentri, adakah terdapat kaedah ketersediaan tinggi yang lain?

Terdapat gugusan Kluster untuk mencapai ketersediaan tinggi Kluster Redis yang dipantau oleh gugusan Sentinel mempunyai seni bina tuan-hamba dan tidak boleh dikembangkan dengan mudah. Menggunakan kluster Redis Cluster terutamanya menyelesaikan pelbagai masalah kelambatan yang disebabkan oleh penyimpanan data yang besar, dan juga memudahkan pengembangan mendatar.

Apabila berhadapan dengan berjuta-juta atau berpuluh-puluh juta pengguna, gugusan penghirisan Redis yang boleh berskala secara mendatar akan menjadi pilihan yang sangat baik.

Penemuduga: Apakah Kluster?

Kluster Redis ialah penyelesaian pangkalan data teragih Kluster mengurus data melalui sharding (amalan "bahagi dan takluk") dan menyediakan fungsi replikasi dan failover.

Bahagikan data kepada 16384 slot, dan setiap nod bertanggungjawab untuk sebahagian daripada slot. Maklumat slot disimpan dalam setiap nod.

Ia terpencar Seperti yang ditunjukkan dalam rajah, kluster terdiri daripada tiga nod Redis Setiap nod bertanggungjawab untuk sebahagian daripada data keseluruhan kluster menjadi berbeza.

Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Tiga nod disambungkan antara satu sama lain untuk membentuk kluster peer-to-peer Mereka bertukar maklumat kluster antara satu sama lain melalui protokol Gossip Akhirnya, setiap nod menyimpan maklumat peruntukan slot lain.

Penemuduga: Bagaimanakah slot cincang dipetakan kepada kejadian Redis?

  1. Mengikut kunci pasangan nilai kunci, gunakan algoritma CRC16 untuk mengira nilai 16-bit
  2. Modulo nilai 16-bit kepada 16384 kepada dapatkan 0 Nombor ~ 16383 mewakili slot cincang yang sepadan dengan kunci.
  3. Cari contoh yang sepadan berdasarkan maklumat slot.

Hubungan pemetaan antara data pasangan nilai kunci, slot cincang dan kejadian Redis adalah seperti berikut:

2Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Penemuduga: Bagaimana tentang failover Kluster Implement?

Nod kluster Redis menggunakan protokol Gossip untuk menyiarkan status dan perubahan dalam pengetahuan mereka tentang keseluruhan kluster. Contohnya, jika nod mendapati bahawa nod tertentu hilang (PFail), ia akan menyiarkan maklumat ini ke seluruh kluster dan nod lain juga boleh menerima maklumat sambungan yang hilang ini.

Jika nod menerima bahawa bilangan pemotongan daripada nod (PFail Count) telah mencapai majoriti kluster, ia boleh menandakan nod sebagai pasti luar talian (Gagal) dan kemudian menyiarkannya ke seluruh kluster. Paksa nod lain untuk turut menerima hakikat bahawa nod telah di luar talian, dan segera lakukan suis induk-hamba pada nod yang hilang.

Penemuduga: Bagaimanakah klien menentukan contoh data yang diakses diedarkan?

Tokok Redis akan menghantar maklumat slot cincangnya kepada kejadian lain dalam kelompok melalui protokol Gossip, merealisasikan penyebaran maklumat peruntukan slot cincang.

Dengan cara ini, setiap tika dalam kelompok mempunyai maklumat perhubungan pemetaan antara semua slot cincang dan tika.

Apabila pelanggan menyambung ke mana-mana kejadian, tika itu bertindak balas kepada pelanggan dengan hubungan pemetaan antara slot cincang dan tika itu, dan pelanggan menyimpan cache slot cincang dan maklumat pemetaan tika secara setempat.

Apabila pelanggan membuat permintaan, slot cincang yang sepadan dengan kunci akan dikira, dan kemudian contoh di mana data terletak akan ditempatkan melalui maklumat pemetaan contoh slot cincang setempat, dan permintaan itu akan dihantar ke contoh yang sepadan.

2Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Penemuduga: Apakah mekanisme pengalihan semula Redis?

Hubungan pemetaan antara slot cincang dan kejadian telah berubah disebabkan oleh kejadian baharu atau pengagihan semula pengimbangan beban Pelanggan menghantar permintaan kepada tika, yang tidak mempunyai data yang sepadan, Redis instance akan memberitahu klien untuk menghantar permintaan ke instance lain .

Redis memberitahu pelanggan melalui ralat MOVED dan ralat ASK.

MOVED

MOVED Ralat (pengimbangan beban, data telah dipindahkan ke kejadian lain): Apabila pelanggan menghantar permintaan operasi pasangan nilai kunci kepada tika, Apabila slot di mana kunci terletak tidak dimiliki dengan sendirinya, instance akan mengembalikan ralat MOVED dan ubah hala ke nod yang bertanggungjawab untuk slot.

Pada masa yang sama, klien juga akan mengemas kini cache setempat untuk mengemas kini perhubungan yang sepadan antara slot dan tika Redis dengan betul .

2Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

TANYA

Jika terdapat banyak data dalam slot, sebahagian daripadanya akan dipindahkan ke tika baharu dan sebahagian daripadanya tidak akan berhijrah.

Jika kunci yang diminta ditemui pada nod semasa, laksanakan arahan terus, jika tidak, respons ralat ASK akan diperlukan.

Apabila pemindahan slot tidak selesai, jika Slot di mana kunci yang perlu diakses sedang dipindahkan dari contoh 1 ke contoh 2 (jika kunci tidak lagi dalam contoh 1), contoh 1 akan kembali mesej ralat ASK kepada klien: Slot cincang di mana kunci yang diminta oleh klien terletak sedang dipindahkan ke contoh 2. Anda mula-mula menghantar arahan ASKING ke contoh 2, dan kemudian menghantar arahan operasi .

Contohnya, pelanggan meminta untuk mencari slot 16330 dengan kunci = "Akaun Rasmi: Code Byte" pada contoh 172.17.18.1 Jika nod 1 boleh menemuinya, ia akan melaksanakan arahan secara langsung, jika tidak, ia akan bertindak balas dengan mesej ralat ASK dan Arahkan klien ke nod sasaran yang sedang dipindahkan, 172.17.18.2.

2Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!

Nota: Arahan ralat ASK tidak mengemas kini maklumat peruntukan slot cincang cache klien.

Ringkasan

Artikel ini terutamanya membincangkan kandungan teras Redis, yang melibatkan struktur data, model memori, model IO, RDB dan AOF yang berterusan, prinsip replikasi tuan-hamba, prinsip sentri, prinsip kelompok .

Alamat asal: https://juejin.cn/post/6976257378094481444

Pengarang: Code Brother Byte

Lebih banyak pengetahuan berkaitan pengaturcaraan, Sila layari : Video Pengaturcaraan! !

Atas ialah kandungan terperinci Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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