Mengapa Redis mengalahkan Memcached untuk caching

Memcached atau Redis? Ini adalah persoalan yang hampir selalu timbul dalam sebarang perbincangan mengenai peningkatan prestasi daripada aplikasi web moden yang berasaskan pangkalan data. Apabila prestasi perlu ditingkatkan, caching sering kali menjadi langkah pertama, dan Memcached atau Redis biasanya merupakan tempat pertama untuk beralih.

Enjin cache terkenal ini mempunyai beberapa persamaan, tetapi juga mempunyai perbezaan penting. Redis, yang lebih baru dan lebih serba boleh, hampir selalu menjadi pilihan yang unggul.

Redis vs. Memcached untuk caching

Mari mulakan dengan persamaan. Kedua-dua Memcached dan Redis berfungsi sebagai memori data kunci, walaupun Redis lebih tepat digambarkan sebagai penyimpanan struktur data. Kedua-dua Memcached dan Redis tergolong dalam keluarga penyelesaian pengurusan data NoSQL, dan keduanya berdasarkan model data nilai-kunci. Mereka berdua menyimpan semua data dalam RAM, yang tentu saja menjadikannya sangat berguna sebagai lapisan cache. Dari segi prestasi, kedua-dua penyimpanan data juga sangat serupa, menunjukkan ciri-ciri yang hampir serupa (dan metrik) berkenaan dengan throughput dan latensi.

Memcached dan Redis adalah projek sumber terbuka yang matang dan sangat popular. Memcached pada mulanya dikembangkan oleh Brad Fitzpatrick pada tahun 2003 untuk laman web LiveJournal. Sejak itu, Memcached telah ditulis ulang dalam C (implementasi aslinya di Perl) dan dimasukkan ke dalam domain publik, di mana ia telah menjadi landasan aplikasi Web moden. Perkembangan Memcached semasa difokuskan pada kestabilan dan pengoptimuman daripada menambahkan ciri baru.

Redis diciptakan oleh Salvatore Sanfilippo pada tahun 2009, dan Sanfilippo kekal sebagai pemaju utama projek tersebut hari ini. Redis kadang-kadang digambarkan sebagai "Memcached on steroid," yang tidak mengejutkan memandangkan bahagian-bahagian Redis dibangun sebagai tindak balas terhadap pelajaran yang dipetik dari penggunaan Memcached. Redis mempunyai lebih banyak ciri daripada Memcached dan, dengan itu, lebih kuat dan fleksibel.

Digunakan oleh banyak syarikat dan dalam persekitaran pengeluaran kritikal misi, kedua-dua Memcached dan Redis disokong oleh perpustakaan pelanggan dalam setiap bahasa pengaturcaraan yang dapat difahami, dan ia termasuk dalam banyak pakej untuk pembangun. Sebenarnya, ini adalah timbunan web yang jarang berlaku yang tidak termasuk sokongan terbina dalam untuk Memcached atau Redis.

Mengapa Memcached dan Redis begitu popular? Bukan sahaja sangat berkesan, mereka juga agak sederhana. Memulakan dengan Memcached atau Redis dianggap kerja mudah bagi pembangun. Hanya memerlukan beberapa minit untuk menyiapkan dan membuat mereka bekerja dengan aplikasi. Oleh itu, pelaburan masa dan usaha yang kecil dapat memberi kesan mendadak pada prestasi — biasanya berdasarkan pesanan besar. Penyelesaian mudah dengan faedah besar; itu hampir dengan sihir yang anda dapat.

Bila hendak menggunakan Memcached

Memcached lebih disukai ketika menyimpan data yang relatif kecil dan statik, seperti fragmen kod HTML. Pengurusan memori dalaman Memcached, walaupun tidak secanggih dengan Redis, lebih efisien dalam kes penggunaan paling mudah kerana menggunakan sumber memori yang relatif lebih sedikit untuk metadata. String (satu-satunya jenis data yang disokong oleh Memcached) sangat sesuai untuk menyimpan data yang hanya dibaca, kerana rentetan tidak memerlukan pemprosesan lebih lanjut.

Kumpulan data yang besar sering kali melibatkan data bersiri, yang selalu memerlukan lebih banyak ruang untuk disimpan. Walaupun Memcached secara efektif terhad untuk menyimpan data dalam bentuk bersiri, struktur data di Redis dapat menyimpan aspek data secara asli, sehingga mengurangi overhead serialisasi.

Senario kedua di mana Memcached mempunyai kelebihan berbanding Redis adalah dalam skala. Kerana Memcached multithreaded, anda dapat dengan mudah meningkatkannya dengan memberikan lebih banyak sumber komputasi, tetapi anda akan kehilangan sebahagian atau seluruh data cache (bergantung pada sama ada anda menggunakan hashing yang konsisten). Redis, yang kebanyakannya berulir tunggal, dapat skala secara mendatar melalui pengelompokan tanpa kehilangan data. Penggabungan adalah penyelesaian penskalaan yang berkesan, tetapi relatif lebih kompleks untuk disiapkan dan dikendalikan.

Bila hendak menggunakan Redis

Anda pasti selalu mahu menggunakan Redis kerana struktur datanya. Dengan Redis sebagai cache, anda memperoleh banyak tenaga (seperti kemampuan untuk menyempurnakan kandungan dan ketahanan cache) dan kecekapan yang lebih besar secara keseluruhan. Setelah anda menggunakan struktur data, peningkatan kecekapan menjadi luar biasa untuk senario aplikasi tertentu.

Keunggulan Redis terbukti dalam hampir semua aspek pengurusan cache. Cache menggunakan mekanisme yang disebut pengusiran data untuk memberi ruang kepada data baru dengan menghapus data lama dari memori. Mekanisme pengusiran data Memcached menggunakan algoritma Paling Baru Digunakan dan secara sewenang-wenangnya mengusir data yang ukurannya serupa dengan data baru.

Sebaliknya, Redis memungkinkan untuk mengawal pengusiran secara halus, yang membolehkan anda memilih dari enam polisi pengusiran yang berbeza. Redis juga menggunakan pendekatan yang lebih canggih untuk pengurusan memori dan pemilihan calon pengusiran. Redis menyokong pengusiran malas dan aktif, di mana data diusir hanya apabila lebih banyak ruang diperlukan atau proaktif. 

Redis memberi anda fleksibiliti yang lebih besar mengenai objek yang boleh anda cache. Walaupun Memcached menghadkan nama kunci kepada 250 bait dan hanya berfungsi dengan rentetan biasa, Redis membenarkan nama kunci dan nilai masing-masing sebesar 512MB, dan selamat untuk binari. Plus, Redis mempunyai lima struktur data utama untuk dipilih, membuka dunia kemungkinan kepada pembangun aplikasi melalui caching pintar dan manipulasi data cache.

Redis kerana ketekunan data

Menggunakan struktur data Redis dapat mempermudah dan mengoptimumkan beberapa tugas - bukan hanya ketika melakukan cache, tetapi bahkan ketika anda menginginkan data tersebut berterusan dan selalu tersedia. Sebagai contoh, bukannya menyimpan objek sebagai rentetan bersiri, pembangun boleh menggunakan Redis Hash untuk menyimpan medan dan nilai objek, dan menguruskannya menggunakan satu kunci. Redis Hash menjimatkan keperluan pemaju untuk mengambil keseluruhan rentetan, mendeseralisasikannya, mengemas kini nilai, mengubah ukuran objek, dan mengganti keseluruhan rentetan dalam cache dengan nilai barunya untuk setiap kemas kini sepele — itu bermaksud penggunaan sumber daya yang lebih rendah dan peningkatan prestasi.

Struktur data lain yang ditawarkan oleh Redis (seperti senarai, set, set diurutkan, hyperloglog, bitmap, dan indeks geospatial) dapat digunakan untuk menerapkan senario yang lebih kompleks. Kumpulan yang disusun untuk pengambilan dan analisis data siri masa adalah contoh lain dari struktur data Redis yang menawarkan kerumitan berkurang dan penggunaan jalur lebar yang lebih rendah.

Kelebihan lain dari Redis ialah data yang disimpannya tidak legap, jadi pelayan dapat memanipulasinya secara langsung. Sebilangan besar perintah 180-plus yang tersedia di Redis dikhaskan untuk operasi pemprosesan data dan menyisipkan logik di penyimpanan data itu sendiri melalui skrip Lua sisi pelayan. Perintah dan skrip pengguna bawaan ini memberi anda fleksibiliti untuk menangani tugas pemprosesan data secara langsung di Redis tanpa harus mengirim data ke seluruh jaringan ke sistem lain untuk diproses.

Redis menawarkan ketekunan data pilihan dan dapat disesuaikan yang dirancang untuk mengikat cache setelah penutupan yang dirancang atau kegagalan yang tidak dirancang. Walaupun kita cenderung menganggap data dalam cache tidak stabil dan sementara, data ke cakera yang berterusan dapat sangat berguna dalam senario cache. Mempunyai data cache yang tersedia untuk dimuat sebaik sahaja dimulakan semula memungkinkan pemanasan cache yang lebih pendek dan menghilangkan beban yang terlibat dalam mengisi semula dan mengira semula kandungan cache dari penyimpanan data utama.

Meniru replikasi data dalam memori 

Redis juga dapat meniru data yang dikendalikannya. Replikasi dapat digunakan untuk melaksanakan penyediaan cache yang sangat tersedia yang dapat menahan kegagalan dan memberikan perkhidmatan tanpa gangguan kepada aplikasi. Kegagalan cache hanya sedikit daripada kegagalan aplikasi dari segi kesan terhadap pengalaman pengguna dan prestasi aplikasi, jadi mempunyai penyelesaian yang terbukti yang menjamin kandungan cache dan ketersediaan perkhidmatan adalah kelebihan utama dalam kebanyakan kes.

Akhir sekali, dari segi keterlihatan operasi, Redis menyediakan banyak metrik dan banyak arahan introspektif untuk memantau dan mengesan penggunaan dan tingkah laku yang tidak normal. Statistik masa nyata mengenai setiap aspek pangkalan data, paparan semua arahan yang dilaksanakan, penyenaraian dan pengurusan sambungan pelanggan — Redis mempunyai semua itu dan banyak lagi.

Apabila pembangun menyedari keberkesanan kecekapan Redis dan kemampuan replikasi dalam ingatan, mereka sering menggunakannya sebagai pangkalan data responden pertama, biasanya untuk menganalisis dan memproses data halaju tinggi dan memberikan respons kepada pengguna sementara pangkalan data sekunder (selalunya lebih lambat) mengekalkan catatan sejarah mengenai apa yang berlaku. Apabila digunakan dengan cara ini, Redis juga sesuai untuk kes penggunaan analisis.

Redis untuk analisis data

Tiga senario analisis segera terlintas di fikiran. Dalam senario pertama, apabila menggunakan sesuatu seperti Apache Spark untuk memproses set data besar secara berulang, anda boleh menggunakan Redis sebagai lapisan penyampaian untuk data yang sebelumnya dikira oleh Spark. Dalam senario kedua, menggunakan Redis sebagai stor data tersebar dalam ingatan anda, dapat mempercepat kelajuan pemprosesan Spark dengan faktor 45 hingga 100. Akhirnya, senario yang terlalu umum adalah senario di mana laporan dan analitik perlu disesuaikan oleh pengguna, tetapi mengambil data dari simpanan data kumpulan yang wujud (seperti Hadoop atau RDBMS) memerlukan masa yang terlalu lama. Dalam kes ini, penyimpanan struktur data dalam memori seperti Redis adalah satu-satunya cara praktikal untuk mendapatkan masa paging dan tindak balas sub-milisaat.

Semasa menggunakan set data operasi atau beban kerja analitik yang sangat besar, menjalankan segala-galanya dalam memori mungkin tidak menjimatkan. Untuk mencapai prestasi sub-milisaat dengan kos yang lebih rendah, Redis Labs membuat versi Redis yang menggunakan kombinasi RAM dan flash, dengan pilihan untuk mengkonfigurasi nisbah RAM-ke-kilat. Walaupun ini membuka beberapa jalan baru untuk mempercepat pemprosesan beban kerja, ia juga memberi pilihan kepada pemaju untuk menjalankan "cache on flash" mereka.

Perisian sumber terbuka terus menyediakan beberapa teknologi terbaik yang ada sekarang. Untuk meningkatkan prestasi aplikasi melalui caching, Redis dan Memcached adalah calon yang paling mapan dan terbukti produksi. Namun, memandangkan fungsi Redis yang lebih kaya, reka bentuk yang lebih maju, banyak potensi penggunaan, dan kecekapan kos yang lebih besar, Redis semestinya menjadi pilihan pertama anda dalam hampir semua kes.

---

Itamar Haber (@itamarhaber) adalah ketua penyokong pembangun di Redis Labs, yang menawarkan Memcached dan Redis sebagai perkhidmatan awan yang dikendalikan sepenuhnya untuk pemaju. Pengalamannya yang berbeza-beza merangkumi pengembangan produk perisian dan pengurusan dan peranan kepemimpinan di Xeround, Etagon, Amicada, dan MNS Ltd. Itamar memegang Master Pentadbiran Perniagaan dari program Kellogg-Recanati bersama oleh Universiti Barat Laut dan Tel-Aviv, serta Sarjana Sains dalam Sains Komputer.

Forum Teknologi Baru menyediakan tempat untuk meneroka dan membincangkan teknologi perusahaan yang baru muncul dalam kedalaman dan luas yang belum pernah terjadi sebelumnya. Pemilihannya bersifat subjektif, berdasarkan pilihan teknologi yang kami percayai penting dan menarik minat pembaca. tidak menerima jaminan pemasaran untuk penerbitan dan berhak untuk mengedit semua kandungan yang disumbangkan. Hantarkan semua pertanyaan ke [email protected]