


Perkongsian soalan temuduga Redis frekuensi tinggi akan membantu anda menguasai mata pengetahuan teras!
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!
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…
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
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)
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.
Kelebihan rentetan dinamik mudah SDS
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.
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.
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:
Mesej daripada Abang Ma: Kita perlu ambil perhatian bahawa utas tunggal Redis merujuk kepada IO rangkaianJangan katakan bahawa Redis hanya mempunyai satu utas.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.
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.
- Kod lebih jelas dan logik pemprosesan adalah mudah.
- Model pemultipleksan I/O
- Redis menggunakan teknologi pemultipleksan I/O untuk memproses sambungan secara serentak. Rangka kerja acara mudah yang dilaksanakan oleh epoll sendiri digunakan.
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 Redis
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.
Apa yang perlu dilakukan jika terdapat konflik Hash?
Redis menyelesaikan konflik melalui
pencincangan rantaitypedef 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:
- Peruntukkan lebih banyak ruang untuk "jadual cincang 2";
- Peta semula dan salin data "jadual cincang 1" kepada "jadual cincang 2"; jadual hash 1.
Sebaliknya,
semula progresifdigunakan 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.- Keluar daripada sub-proses bgsave akan menyekat utas utama Semakin besar memori utas utama, semakin lama masa penyekatan.
- Jadi Redis juga mereka bentuk log pasca tulis AOF untuk merekodkan arahan untuk mengubah suai memori.
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.
Apabila melakukan pemulihan data, baca fail RDB terus ke dalam memori untuk melengkapkan pemulihan.
Ya, Redis menggunakan pelbagai proses sistem pengendalianteknologi 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.fork
Apabila utas utama melaksanakan perintah tulis untuk mengubah suai data, salinan data akan dibuat
bgsave
Ini bukan sahaja memastikan integriti syot kilat, tetapi juga membenarkan urutan utama mengubah suai data pada masa yang sama, mengelakkan sebarang kesan terhadap perniagaan biasa.
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.
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.bgrewriteaof
Prinsipnya 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.
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.
JadiApabila 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 RedisRedis 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;
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 ;
- Asas ketersediaan tinggi: Ia adalah asas untuk pelaksanaan sentinel dan kelompok, dan asas ketersediaan tinggi.
- 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.
- 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.
- untuk menjana fail RDB dan menghantar fail ke pustaka hamba Pada masa yang sama,
- 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. 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.
-
bgsave
Penemuduga: 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? - 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 dan
Proses pelaksanaan salinan tambahan adalah seperti berikut:
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:
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.
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.
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?
- Mengikut kunci pasangan nilai kunci, gunakan algoritma CRC16 untuk mengira nilai 16-bit
- Modulo nilai 16-bit kepada 16384 kepada dapatkan 0 Nombor ~ 16383 mewakili slot cincang yang sepadan dengan kunci.
- Cari contoh yang sepadan berdasarkan maklumat slot.
Hubungan pemetaan antara data pasangan nilai kunci, slot cincang dan kejadian Redis adalah seperti berikut:
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.
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 .
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.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

Redis menggunakan jadual hash untuk menyimpan data dan menyokong struktur data seperti rentetan, senarai, jadual hash, koleksi dan koleksi yang diperintahkan. Redis berterusan data melalui snapshots (RDB) dan menambah mekanisme tulis sahaja (AOF). Redis menggunakan replikasi master-hamba untuk meningkatkan ketersediaan data. Redis menggunakan gelung acara tunggal untuk mengendalikan sambungan dan arahan untuk memastikan atom dan konsistensi data. Redis menetapkan masa tamat tempoh untuk kunci dan menggunakan mekanisme memadam malas untuk memadamkan kunci tamat tempoh.

Untuk melihat nombor versi REDIS, anda boleh menggunakan tiga kaedah berikut: (1) Masukkan arahan INFO, (2) Mulakan pelayan dengan pilihan --version, dan (3) Lihat fail konfigurasi.

Untuk melihat semua kunci di Redis, terdapat tiga cara: Gunakan perintah kunci untuk mengembalikan semua kunci yang sepadan dengan corak yang ditentukan; Gunakan perintah imbasan untuk melangkah ke atas kunci dan kembalikan satu set kunci; Gunakan arahan maklumat untuk mendapatkan jumlah kunci.

Langkah-langkah untuk menyelesaikan masalah yang tidak dapat dijumpai oleh Redis-Server: periksa pemasangan untuk memastikan Redis dipasang dengan betul; Tetapkan pembolehubah persekitaran redis_host dan redis_port; Mulakan Redis Server Redis-server; Semak sama ada pelayan sedang menjalankan ping redis-cli.

Redis memerintahkan set (ZSET) digunakan untuk menyimpan elemen yang diperintahkan dan disusun mengikut skor yang berkaitan. Langkah -langkah untuk menggunakan ZSET termasuk: 1. Buat zset; 2. Tambah ahli; 3. Dapatkan skor ahli; 4. Dapatkan kedudukan; 5. Dapatkan ahli dalam julat ranking; 6. Padam ahli; 7. Dapatkan bilangan elemen; 8. Dapatkan bilangan ahli dalam julat skor.

Kaunter Redis menyediakan struktur data untuk menyimpan dan mengendalikan kaunter. Langkah -langkah khusus termasuk: Buat kaunter: Gunakan perintah Incr untuk menambah 1 ke kekunci yang ada. Dapatkan nilai kaunter: Gunakan arahan GET untuk mendapatkan nilai semasa. Kaunter kenaikan: Gunakan perintah Inter, diikuti dengan jumlah yang akan ditingkatkan. Kaunter pengurangan: Gunakan perintah Dec Dec atau Decrby untuk menurun sebanyak 1 atau tentukan jumlahnya. Tetapkan semula kaunter: Gunakan arahan set untuk menetapkan nilainya kepada 0. Di samping itu, kaunter boleh digunakan untuk mengehadkan kadar, pengesanan sesi, dan membuat sistem pengundian.

Redis menggunakan lima strategi untuk memastikan keunikan kekunci: 1. Pemisahan ruang nama; 2. Struktur data hash; 3. Tetapkan struktur data; 4. Karakter Khas Kekunci String; 5. Pengesahan skrip Lua. Pilihan strategi khusus bergantung kepada organisasi data, prestasi, dan keperluan skalabilitas.
