Redis ialah sistem storan nilai kunci berprestasi tinggi sumber terbuka yang digunakan secara meluas dalam data besar, reka bentuk seni bina dan bidang lain. Model IO rangkaiannya yang cekap ialah asas penting untuk tindak balas pantasnya terhadap permintaan. Artikel ini akan memperkenalkan model rangkaian IO Redis dan prinsip pelaksanaannya, dan membincangkan kaedah pengoptimumannya dalam aplikasi praktikal.
1. Model IO rangkaian Redis
Model IO rangkaian Redis memilih gabungan benang tunggal dan pemultipleksan. Proses asas adalah seperti berikut:
Di atas ialah proses model IO rangkaian Redis. Memandangkan Redis menggunakan pendekatan satu benang, ia mengelakkan overhed penukaran konteks dan persaingan kunci yang disebabkan oleh berbilang benang. Teknologi pemultipleksan membenarkan satu utas memproses berbilang permintaan pelanggan pada masa yang sama, dengan itu meningkatkan keupayaan pemprosesan serentak sistem.
2. Prinsip pelaksanaan model IO rangkaian Redis
Teknologi pemultipleksan yang digunakan oleh Redis terutamanya dilaksanakan dengan menggunakan fungsi pilih, tinjauan pendapat, epoll dan lain-lain yang disediakan oleh kernel Linux. Antaranya, fungsi pilih dan tinjauan pendapat menyokong bilangan deskriptor fail yang terhad, manakala fungsi epoll boleh menyokong sejumlah besar sambungan serentak dan prestasinya lebih cekap. Oleh itu, dalam versi Redis di atas Linux 2.6, fungsi epoll lebih diutamakan.
Redis akan mencipta pemegang epoll apabila ia bermula, dan menambah soket mendengar (iaitu, port perkhidmatan utama) ke epoll untuk pemantauan. Apabila terdapat permintaan sambungan baharu, sambungan diproses melalui fungsi terima dan soket yang baru disambungkan ditambahkan pada set deskriptor fail yang diuruskan oleh epoll. Apabila terdapat data yang boleh dibaca, epoll akan memberitahu Redis, dan Redis akan membaca permintaan daripada klien, menghuraikan dan memprosesnya mengikut protokol, dan akhirnya menulis data respons kembali kepada klien.
Perlu diingat bahawa Redis menggunakan IO tidak menyekat (IO Tidak Menghalang). Prinsipnya adalah untuk menetapkan deskriptor fail kepada mod tidak menyekat, dengan itu menggunakan ciri-ciri IO tak segerak kernel untuk melaksanakan operasi baca dan tulis tanpa sekatan, mengelakkan situasi di mana proses disekat menunggu pemulangan operasi IO. Dalam mod IO tidak menyekat, apabila operasi baca kembali, mungkin masih terdapat data yang belum dibaca dalam deskriptor fail semasa, jadi anda perlu menggunakan gelung untuk membaca sehingga semua data dibaca. Operasi penulisan adalah serupa, dan data perlu ditulis dalam gelung sehingga semua data ditulis.
3. Pengoptimuman model IO rangkaian Redis
Algoritma TCP Nagle ialah kaedah untuk mengurangkan paket data kecil pada rangkaian Bilangan algoritma untuk meningkatkan kecekapan penghantaran rangkaian. Walau bagaimanapun, dalam beberapa senario, data perlu dihantar dengan segera, seperti log masuk pengguna dan operasi lain Dalam kes ini, anda tidak boleh menunggu sehingga data mencapai saiz optimum sebelum menghantar. Pada masa ini, anda boleh melumpuhkan algoritma TCP Nagle dengan menetapkan pilihan TCP_NODELAY dan menghantar data dengan segera.
Dalam Redis, operasi IO yang kerap akan mengurangkan prestasi sistem dengan banyak. Oleh itu, semasa menulis aplikasi Redis, anda boleh mengurangkan jumlah dan bilangan data yang dihantar dengan mengoptimumkan protokol, seperti menggabungkan berbilang permintaan menjadi satu permintaan. Pada masa yang sama, apabila pelanggan melakukan operasi baca dan tulis, ia juga boleh meminimumkan penghantaran paket data yang lebih kecil daripada MTU untuk mengelakkan kerap mencetuskan operasi IO.
Dalam aplikasi Redis, bilangan sambungan akan meningkat apabila bilangan mata wang meningkat Jika sambungan TCP diwujudkan semula setiap kali, ia akan menyebabkan overhed sistem yang lebih besar. Pada masa ini, teknologi kolam sambungan (Connection Pool) boleh digunakan. Pengumpulan sambungan ialah teknologi biasa dan sering digunakan dalam pembangunan sistem konkurensi tinggi. Kumpulan sambungan boleh menguruskan berbilang sambungan dan menggunakan semula sambungan sedia ada, dengan itu mengelakkan penubuhan dan pemusnahan sambungan TCP yang kerap.
Peruntukan dan pelepasan memori Redis ialah bahagian penting dalam aplikasinya. Menggunakan teknologi kumpulan memori biasa boleh mengurangkan bilangan peruntukan memori dan masa keluaran, dengan itu meningkatkan prestasi sistem. Dalam Redis, kaedah pengekodan yang sepadan dengan jenis rentetan ialah embstr atau mentah Jenis mentah tidak menggunakan teknologi kumpulan memori, manakala jenis embstr menggunakan kumpulan memori Oleh itu, jenis embstr harus digunakan untuk menyimpan data sebanyak mungkin .
Walaupun Redis menggunakan pendekatan satu-benang untuk menyediakan operasi IO berprestasi tinggi, ia juga merasakan kesesakannya . Dalam kes ini, fungsi proses daemon dalam satu proses boleh dibahagikan melalui berbilang proses, membolehkan setiap proses mengendalikan operasi IO secara bebas untuk meningkatkan prestasi serentak sistem.
4
Model IO rangkaian Redis menggunakan gabungan benang tunggal dan pemultipleksan Skim pelaksanaan dan kaedah pengoptimumannya yang cekap dapat memastikan pelaksanaan prestasi sistem yang cekap. Dalam pembangunan aplikasi sebenar, adalah perlu untuk memilih kaedah pengoptimuman yang sesuai mengikut situasi khusus untuk membolehkan Redis memaksimumkan potensinya.
Atas ialah kandungan terperinci Analisis dan aplikasi model IO rangkaian Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!