Rumah >pangkalan data >Redis >Analisis ringkas mengapa Redis pantas? Di mana anda tidak lama lagi?
Mengapa Redis pantas? Dimanakah lokasi Redis? Artikel berikut akan membantu anda menganalisis sebab mengapa Redis begitu pantas, saya harap ia akan membantu anda!
Redis ialah pangkalan data NoSQL berdasarkan pasangan nilai kunci Nilai Redis boleh terdiri daripada String, cincang, senarai, set, zset, Bitmaps, HyperLogLog Ia terdiri. daripada pelbagai struktur data dan algoritma. Redis juga menyediakan tamat tempoh kunci, menerbitkan dan melanggan, urus niaga, skrip Lua, sentinel, Kluster dan fungsi lain. [Cadangan berkaitan: Tutorial video Redis]
Redis melaksanakan arahan dengan cepat, dan mengikut prestasi rasmi, ia boleh mencapai 10w qps. Jadi artikel ini terutamanya memperkenalkan di mana Redis adalah pantas. -level bahasa Untuk program, seperti Java, python, dll. Anda mungkin berfikir bahawa bahasa C adalah sangat lama, tetapi ia benar-benar berguna Lagipun, sistem Unix dilaksanakan dalam C, jadi bahasa C adalah bahasa yang sangat dekat dengan sistem pengendalian. Redis dibangunkan dalam bahasa C, jadi pelaksanaan akan lebih cepat.
Selain itu, jika pelajar kolej mempelajari C dengan baik, ini akan membantu anda memahami sistem pengendalian komputer dengan lebih baik. Jangan fikir selepas belajar bahasa peringkat tinggi, anda tidak perlu memberi perhatian kepada lapisan bawah. Berikut ialah buku yang lebih sukar untuk dicadangkan, "Pemahaman Mendalam Mengenai Sistem Pengkomputeran". 2. Akses memori tulen
Redis meletakkan semua data dalam ingatan berfungsi seperti biasa dan tidak perlu diambil semula cakera. Membaca data, 0 kali IO. Masa tindak balas memori adalah kira-kira 100 nanosaat, yang merupakan asas penting untuk kelajuan pantas Redis. Mari kita lihat dahulu kelajuan CPU:
Ambil komputer saya sebagai contoh, frekuensi utama ialah 3.1G, bermakna ia boleh melaksanakan arahan 3.1*10^9 sesaat. Jadi CPU melihat dunia dengan sangat, sangat perlahan, ingatan adalah seratus kali lebih perlahan daripadanya, dan cakera adalah sejuta kali lebih perlahan daripadanya Adakah anda fikir ia lebih pantas atau tidak?
Saya meminjam gambar daripada "Pemahaman Mendalam Sistem Komputer", yang menunjukkan hierarki memori biasa Pada lapisan L0, CPU boleh mengaksesnya dalam satu kitaran jam, dan cache berasaskan SRAM diperbaharui. Mereka boleh diakses dalam beberapa kitaran jam CPU, dan kemudian memori utama berasaskan DRAM, yang boleh diakses dalam puluhan hingga ratusan kitaran jam. 3. Rangkaian tunggalPertama, pelaksanaan algoritma dipermudahkan satu benang, data serentak Pelaksanaan struktur bukan sahaja sukar tetapi juga sukar untuk diuji. Kedua, satu benang mengelakkan penggunaan yang disebabkan oleh penukaran benang dan mengunci dan melepaskan kunci Untuk pembangunan bahagian pelayan, kunci dan penukaran benang biasanya membunuh prestasi. Sudah tentu, benang tunggal juga akan mempunyai kekurangannya, yang juga mimpi ngeri Redis: menyekat. Jika pelaksanaan perintah terlalu panjang, ia akan menyebabkan arahan lain disekat, yang sangat mematikan untuk Redis, jadi Redis ialah pangkalan data untuk senario pelaksanaan pantas.
Selain Redis, Node.js juga berbenang tunggal, dan Nginx juga berbenang tunggal, tetapi kedua-duanya adalah model pelayan berprestasi tinggi. 4. Mekanisme pemultipleksan I/O berbilang saluran yang tidak menyekat
Sebelum itu, izinkan saya bercakap tentang I/O penyekatan tradisional Cara ia berfungsi: Apabila menggunakan baca atau tulis untuk membaca atau menulis deskriptor fail (File Descriptor FD), jika data tidak diterima, benang akan digantung sehingga data diterima.
Walaupun model penyekatan mudah difahami, ia tidak akan digunakan apabila berbilang tugasan pelanggan perlu diproses.
Pemultipleksan I/O sebenarnya bermakna pengurusan berbilang sambungan boleh berada dalam proses yang sama. Berbilang saluran merujuk kepada sambungan rangkaian, pemultipleksan hanyalah benang yang sama. Dalam perkhidmatan rangkaian, peranan pemultipleksan I/O adalah untuk memberitahu kod perniagaan tentang berbilang peristiwa sambungan pada satu masa Kaedah pemprosesan ditentukan oleh kod perniagaan. Dalam model pemultipleksan I/O, panggilan fungsi yang paling penting ialah fungsi pemultipleksan I/O Kaedah ini boleh memantau bacaan dan penulisan deskriptor berbilang fail (fd) pada masa yang sama fd boleh dibaca/boleh ditulis, kaedah ini akan mengembalikan bilangan fd boleh dibaca/ditulis. Redis menggunakan epoll sebagai pelaksanaan teknologi pemultipleksan I/O, dan model pemprosesan acara Redis sendiri menukar acara baca, tulis, tutup, dsb. epoll tanpa membuang terlalu banyak masa pada rangkaian I/O. Realisasikan pemantauan berbilang bacaan dan tulis FD untuk meningkatkan prestasi.Mari kita berikan contoh yang jelas. Sebagai contoh, pelayan tcp mengendalikan 20 soket pelanggan.
Pelan A: Pemprosesan berurutan Jika soket pertama lambat dalam membaca data disebabkan oleh kad rangkaian, sebaik sahaja ia disekat, selebihnya akan menjadi kacau.
Pelan B: Buat sub-proses klon untuk setiap permintaan soket Apatah lagi setiap proses menggunakan banyak sumber sistem Proses penukaran sahaja sudah cukup untuk meletihkan sistem pengendalian.
Skim C (model pemultipleksan I/O, epoll): Daftarkan fd yang sepadan dengan soket pengguna ke dalam epoll (sebenarnya apa yang dihantar antara pelayan dan sistem pengendalian bukanlah fd soket tetapi data structure of fd_set) , dan kemudian epoll hanya memberitahu soket yang perlu dibaca/ditulis, dan hanya perlu memproses fd soket yang aktif dan berubah.
Dengan cara ini, keseluruhan proses hanya akan disekat apabila epoll dipanggil, dan penghantaran serta penerimaan mesej pelanggan tidak akan disekat.
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !
Atas ialah kandungan terperinci Analisis ringkas mengapa Redis pantas? Di mana anda tidak lama lagi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!