Rumah >pangkalan data >Redis >12 perkara penting yang sering ditanya dalam temu bual redis (dengan jawapan)
Artikel ini membawakan kepada anda ringkasan beberapa soalan yang sering ditanya semasa temu duga tentang Redis Ia meniru cara penemuduga mendalami topik Redis langkah demi langkah, dan meneliti pemahaman calon secara menyeluruh. daripada Redis saya harap ia akan membantu semua orang.
Kajian yang disyorkan: "Soalan dan jawapan temuduga redis terkini 2022 "
Redis adalah halangan yang tidak dapat dielakkan dalam temuduga Selagi anda menulis bahawa anda telah menggunakan Redis dalam resume anda, anda pasti tidak akan dapat melarikan diri.
Xiao Zhang:
Helo, penemuduga. Saya di sini untuk temuduga.
Penemuduga:
Helo, Xiao Zhang. Saya telah membaca resume anda dan saya mahir dalam Redis, jadi saya hanya akan bertanya kepada anda beberapa soalan berkaitan Redis. Pertama sekali, soalan saya ialah, Adakah Redis benang tunggal atau berbilang benang?
Xiao Zhang:
Model benang yang digunakan dalam versi Redis yang berbeza adalah berbeza Sebelum Redis versi 4.0, model satu benang telah digunakan, dan selepas versi 4.0, ia telah digunakan. menambah sokongan Multi-threading.
Sebelum 4.0, walaupun kami mengatakan bahawa Redis adalah satu utas, ini hanya bermakna bahawa rangkaian I/O dan operasi Set dan Dapatkannya diselesaikan oleh satu utas. Walau bagaimanapun, kegigihan Redis dan penyegerakan kluster masih diselesaikan menggunakan urutan lain.
Selepas 4.0, sokongan berbilang benang telah ditambah, terutamanya ditunjukkan dalam fungsi pemadaman tak segerak bagi data besar, seperti unlink key
, flushdb async
, flushall async
, dsb.
Penemuduga :
Jawapan yang baik, Kalau begitu kenapa Redis memilih untuk menggunakan satu thread sebelum 4.0? Dan adakah ia begitu pantas menggunakan benang tunggal?
Xiao Zhang:
Saya rasa sebab utama memilih benang tunggal ialah ia mudah digunakan, tiada persaingan kunci, semua operasi boleh diselesaikan tanpa kunci, dan tiada jalan buntu atau benang Pertukaran membawa prestasi dan overhed masa, tetapi pada masa yang sama, utas tunggal tidak dapat melaksanakan sepenuhnya prestasi CPU berbilang teras.
Mengenai sebab satu utas begitu pantas, saya rasa terdapat terutamanya sebab berikut:
Kebanyakan operasi Redis diselesaikan dalam ingatan, dan kecekapan pelaksanaan dalam memori itu sendiri Ia pantas dan menggunakan struktur data yang cekap seperti jadual cincang dan jadual langkau.
Menggunakan benang tunggal mengelakkan persaingan berbilang benang, menjimatkan masa dan prestasi overhed yang disebabkan oleh penukaran berbilang benang dan tidak menyebabkan kebuntuan.
Menggunakan mekanisme pemultipleksan I/O untuk mengendalikan sejumlah besar permintaan Soket pelanggan, kerana ia berdasarkan model I/O yang tidak menyekat, yang membolehkan Redis berkomunikasi dengan cekap melalui rangkaian , proses baca dan tulis I/O tidak lagi disekat.
Penemuduga:
Ya, Bagaimanakah Redis mencapai tiada kehilangan data?
Xiao Zhang:
Data Redis disimpan dalam memori Untuk memastikan data Redis tidak hilang, adalah perlu untuk menyimpan data dari memori ke cakera supaya pelayan boleh dimulakan semula Selepas itu, data asal boleh dipulihkan daripada cakera Ini adalah kegigihan data. Terdapat tiga cara untuk mengekalkan data Redis.
Log AOF (Tambah Hanya Fail, mod tambah fail): rekod semua arahan operasi dan tambahkannya pada fail dalam bentuk teks.
Snapshot RDB (Redis DataBase): Tulis data memori pada masa tertentu ke cakera dalam bentuk binari.
Kaedah kegigihan hibrid: Redis 4.0 menambah kaedah kegigihan hibrid baharu, menyepadukan kelebihan RDB dan AOF.
Pewawancara:
Kemudian sila bincangkan tentang prinsip pelaksanaan AOF dan RDB masing-masing.
Xiao Zhang:
AOF menggunakan pengelogan pasca tulis Redis mula-mula melaksanakan arahan untuk menulis data ke dalam memori, dan kemudian merekodkan log ke fail. Log AOF merekodkan arahan operasi, bukan data sebenar Jika kaedah AOF digunakan untuk pemulihan kerosakan, keseluruhan log perlu dilaksanakan.
RDB menggunakan kaedah snapshot memori pada masa tertentu, bukan operasi Oleh itu, apabila menggunakan kaedah RDB untuk pemulihan kerosakan, anda hanya perlu terus Fail RDB boleh dibaca ke dalam memori untuk mencapai pemulihan yang cepat.
Penemuduga:
Anda baru sahaja menyebut bahawa AOF menggunakan kaedah "log pasca tulis", manakala MySQL yang biasa kami gunakan menggunakan kaedah "log pra-tulis", kemudian Mengapa adakah Redis perlu melaksanakan arahan terlebih dahulu dan kemudian menulis data ke log?
Xiao Zhang: Dahi saya mula berpeluh. Apakah soalan yang awak tanya? . .
Nah, ini adalah terutamanya kerana Redis tidak menyemak sintaks arahan sebelum menulisnya ke log, jadi ia hanya merekodkan arahan yang berjaya dilaksanakan untuk mengelakkan daripada merekodkan arahan yang salah, dan tidak mungkin untuk menulis log selepas arahan dilaksanakan Akan menyekat operasi tulis semasa.
Penemuduga:
Kemudian apakah risiko menulis diari selepas ?
Xiao Zhang:
Saya... saya tak tahu macam mana nak buat ni.
Penemuduga:
Nah, terdapat dua risiko utama yang mungkin berlaku semasa menulis log nanti:
Data mungkin hilang: Jika Redis hanya Selepas melaksanakan arahan, jika kegagalan berlaku, arahan itu mungkin hilang.
Boleh menyekat operasi lain: Log AOF sebenarnya dilaksanakan dalam utas utama, jadi apabila Redis menulis fail log ke cakera, ia masih akan menyekat operasi seterusnya dan tidak boleh dilaksanakan.
Saya ada soalan lain: Adakah RDB menyekat urutan apabila mengambil syot kilat?
Xiao Zhang:
Redis menyediakan dua arahan untuk menjana fail snapshot RDB, iaitu save dan bgsave. Perintah simpan dilaksanakan dalam utas utama dan akan menyebabkan penyekatan. Perintah bgsave akan mencipta proses kanak-kanak untuk menulis fail RDB, mengelak daripada menyekat utas utama Ini juga merupakan konfigurasi lalai RDB Redis.
Pewawancara:
RDB Bolehkah data diubah suai semasa mengambil syot kilat?
Xiao Zhang:
Simpan adalah segerak dan akan menyekat arahan pelanggan Ia boleh diubah suai semasa bgsave.
Penemuduga:
Kemudian Bagaimana Redis menyelesaikan masalah membenarkan pengubahsuaian data apabila bgsave mengambil gambar?
Xiao Zhang: (Kenapa awak masih bertanya...saya™ tidak tahu caranya!)
Um, saya tidak pasti tentang perkara ini...
Rasmi Temu Bual:
Ini terutamanya dilaksanakan menggunakan sub-benang bgsave
Operasi khusus adalah seperti berikut:
Jika utas utama melakukan operasi baca, yang. utas utama dan sub-proses bgsave
tidak akan menjejaskan satu sama lain ;
Jika utas utama melakukan operasi tulis, salinan data yang diubah suai akan dibuat, dan kemudianbgsave
proses anak. akan menulis data salinan ke fail RDB Semasa proses ini, utas utama masih boleh Mengubah suai data asal secara langsung.
Perlu diingatkan bahawa kekerapan pelaksanaan Redis pada RDB adalah sangat penting, kerana ini akan menjejaskan integriti data syot kilat dan kestabilan Redis, jadi selepas Redis 4.0 , tambahan Mekanisme kegigihan data hibrid AOF dan RDB: Tulis data ke fail dalam format RDB, dan kemudian simpan arahan operasi seterusnya dalam fail dalam format AOF, yang bukan sahaja memastikan kelajuan mula semula Redis, tetapi juga mengurangkan penggunaan data.
Xiao Zhang:
Saya mempelajarinya.
Penemuduga:
Kemudian bolehkah anda beritahu saya bagaimana Redis mencapai ketersediaan tinggi?
Xiao Zhang:
Terdapat tiga cara utama untuk mencapai ketersediaan tinggi dalam Redis: replikasi tuan-hamba, mod sentinel dan kelompok Redis.
Replikasi tuan-hamba
Segerakkan data daripada pelayan Redis sebelumnya kepada berbilang pelayan Redis hamba, iaitu model tuan-hamba, yang serupa dengan MySQL The prinsip replikasi tuan-hamba adalah sama.
Mod Sentinel
Apabila menggunakan perkhidmatan tuan-hamba Redis, akan ada masalah, iaitu apabila Redis pelayan master-slave muncul Apabila kegagalan berlaku, pemulihan manual diperlukan Untuk menyelesaikan masalah ini, Redis menambah mod sentinel (kerana mod sentinel boleh memantau pelayan induk dan hamba dan menyediakan fungsi pemulihan bencana automatik).
Redis Cluster (cluster)
Redis Cluster ialah mod operasi teragih dan terpencar, yang berasaskan Redis 3.0 The Redis penyelesaian kluster yang dilancarkan dalam versi mengedarkan data pada pelayan yang berbeza untuk mengurangkan pergantungan sistem pada satu nod induk, dengan itu meningkatkan prestasi baca dan tulis perkhidmatan Redis.
Penemu bual:
Gunakan mod sentinel untuk memastikan data mempunyai data pendua dan mempunyai pemantauan sentinel mengenai ketersediaan Setelah induk gagal, terdapat satu peluang untuk memilih hamba. Nod ialah nod induk, yang sudah memenuhi keperluan persekitaran pengeluaran kita Kemudian mengapa kita masih perlu menggunakan mod kluster?
Xiao Zhang:
Nah, mod sentinel masih merupakan nod induk-hamba dalam mod induk-hamba, kita boleh mengembangkan keupayaan konkurensi baca dengan menambahkan nod salve. tetapi tidak ada cara untuk mengembangkan kapasiti penulisan dan kapasiti storan, kapasiti storan hanya boleh menjadi had atas yang boleh dibawa oleh nod induk. Oleh itu, untuk mengembangkan keupayaan menulis dan keupayaan storan, kami perlu memperkenalkan mod kluster.
Penemu bual:
Terdapat begitu banyak nod Induk dalam gugusan, bagaimanakah gugusan redis menentukan nod yang hendak dipilih semasa menyimpan?
Xiao Zhang:
Ini sepatutnya menggunakan beberapa jenis algoritma cincang, tetapi saya tidak pasti. . .
Penemuduga:
Baiklah, itu sahaja untuk temu duga hari ini anda kembali dan tunggu pemberitahuan temu duga kami.
Xiao Zhang:
Baiklah, terima kasih penemu duga, bolehkah anda beritahu saya cara gugusan redis melaksanakan pemilihan nod?
Penemuduga:
Redis Cluster menggunakan algoritma pencincangan konsisten kelas untuk melaksanakan pemilihan nod Mengenai algoritma pencincangan yang konsisten, anda boleh kembali dan lihat sendiri .
Redis Cluster membahagikan dirinya kepada 16384 Slots adalah serupa dengan partition data Setiap pasangan nilai kunci akan dipetakan kepada slot cincangan mengikut pelaksanaan khusus Proses ini dibahagikan kepada dua langkah utama.
Kira nilai 16-bit berdasarkan kunci pasangan nilai kunci mengikut algoritma CRC16.
Kemudian gunakan nilai 16bit untuk modulo 16384 untuk mendapatkan modulus dalam julat 0~16383 Setiap modulus mewakili slot cincang dengan nombor yang sepadan.
Setiap nod Redis bertanggungjawab untuk memproses sebahagian daripada slot Jika anda mempunyai tiga nod induk ABC, slot setiap nod bertanggungjawab adalah seperti berikut:
Dengan cara ini, pemilihan nod kluster direalisasikan.
Pembelajaran yang disyorkan: "Tutorial video Redis", "soalan dan jawapan temu bual redis terkini 2022"
Atas ialah kandungan terperinci 12 perkara penting yang sering ditanya dalam temu bual redis (dengan jawapan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!