Mengapa Redis mengalahkan Memcache untuk penyimpanan cache

Memcached atau Redis? Ini adalah pertanyaan yang hampir selalu muncul dalam diskusi apa pun tentang memeras lebih banyak kinerja dari aplikasi web modern berbasis database. Saat kinerja perlu ditingkatkan, cache sering kali menjadi langkah pertama yang diambil, dan Memcache atau Redis biasanya menjadi tempat pertama untuk beralih.

Mesin cache terkenal ini memiliki sejumlah kesamaan, tetapi mereka juga memiliki perbedaan penting. Redis, yang lebih baru dan lebih serbaguna dari keduanya, hampir selalu merupakan pilihan yang lebih unggul.

Redis vs. Memcache untuk penyimpanan dalam cache

Mari kita mulai dengan persamaannya. Baik Memcached dan Redis berfungsi sebagai penyimpanan data nilai kunci dalam memori, meskipun Redis lebih akurat dijelaskan sebagai penyimpanan struktur data. Baik Memcached dan Redis termasuk dalam rangkaian solusi manajemen data NoSQL, dan keduanya didasarkan pada model data nilai kunci. Keduanya menyimpan semua data dalam RAM, yang tentu saja menjadikannya sangat berguna sebagai lapisan caching. Dalam hal kinerja, kedua penyimpanan data juga sangat mirip, menunjukkan karakteristik (dan metrik) yang hampir identik sehubungan dengan throughput dan latensi.

Baik Memcached dan Redis adalah proyek sumber terbuka yang matang dan sangat populer. Memcached awalnya dikembangkan oleh Brad Fitzpatrick pada tahun 2003 untuk situs web LiveJournal. Sejak itu, Memcache telah ditulis ulang di C (implementasi aslinya di Perl) dan ditempatkan di domain publik, di mana ia telah menjadi landasan aplikasi Web modern. Pengembangan Memcached saat ini difokuskan pada stabilitas dan pengoptimalan daripada menambahkan fitur baru.

Redis dibuat oleh Salvatore Sanfilippo pada tahun 2009, dan Sanfilippo tetap menjadi pengembang utama proyek tersebut hingga saat ini. Redis kadang-kadang digambarkan sebagai "Memcached on steroid," yang tidak mengherankan mengingat bahwa bagian Redis dibuat sebagai tanggapan terhadap pelajaran yang dipelajari dari penggunaan Memcached. Redis memiliki lebih banyak fitur daripada Memcached dan, karenanya, lebih bertenaga dan fleksibel.

Digunakan oleh banyak perusahaan dan dalam lingkungan produksi misi kritis yang tak terhitung jumlahnya, baik Memcached dan Redis didukung oleh pustaka klien dalam setiap bahasa pemrograman yang memungkinkan, dan itu termasuk dalam banyak paket untuk pengembang. Faktanya, ini adalah tumpukan web langka yang tidak menyertakan dukungan bawaan untuk Memcached atau Redis.

Mengapa Memcached dan Redis begitu populer? Tidak hanya sangat efektif, tetapi juga relatif sederhana. Memulai dengan Memcached atau Redis dianggap pekerjaan mudah bagi pengembang. Hanya perlu beberapa menit untuk menyiapkan dan membuatnya berfungsi dengan aplikasi. Jadi, sedikit investasi waktu dan usaha dapat berdampak langsung dan dramatis pada kinerja — biasanya dalam urutan besarnya. Solusi sederhana dengan manfaat besar; itu sedekat mungkin dengan sihir.

Kapan menggunakan Memcached

Memcache bisa lebih disukai saat menyimpan data yang relatif kecil dan statis, seperti fragmen kode HTML. Manajemen memori internal Memcached, meskipun tidak secanggih Redis, lebih efisien dalam kasus penggunaan yang paling sederhana karena menggunakan sumber daya memori yang relatif lebih sedikit untuk metadata. String (satu-satunya tipe data yang didukung oleh Memcached) ideal untuk menyimpan data yang hanya dibaca, karena string tidak memerlukan pemrosesan lebih lanjut.

Kumpulan data yang besar sering kali melibatkan data serial, yang selalu membutuhkan lebih banyak ruang untuk disimpan. Meskipun Memcached secara efektif terbatas untuk menyimpan data dalam bentuk serialnya, struktur data di Redis dapat menyimpan segala aspek data secara native, sehingga mengurangi overhead serialisasi.

Skenario kedua di mana Memcached memiliki keunggulan atas Redis adalah dalam penskalaan. Karena Memcached multithread, Anda dapat dengan mudah meningkatkan skala dengan memberinya lebih banyak sumber daya komputasi, tetapi Anda akan kehilangan sebagian atau semua data yang di-cache (bergantung pada apakah Anda menggunakan pencirian yang konsisten). Redis, yang sebagian besar berupa single-threaded, dapat menskalakan secara horizontal melalui pengelompokan tanpa kehilangan data. Pengelompokan adalah solusi penskalaan yang efektif, tetapi secara komparatif lebih kompleks untuk disiapkan dan dioperasikan.

Kapan menggunakan Redis

Anda hampir selalu ingin menggunakan Redis karena struktur datanya. Dengan Redis sebagai cache, Anda mendapatkan banyak daya (seperti kemampuan untuk menyempurnakan konten cache dan daya tahan) dan efisiensi yang lebih besar secara keseluruhan. Setelah Anda menggunakan struktur data, peningkatan efisiensi menjadi luar biasa untuk skenario aplikasi tertentu.

Keunggulan Redis terbukti di hampir setiap aspek manajemen cache. Cache menggunakan mekanisme yang disebut penggusuran data untuk memberi ruang bagi data baru dengan menghapus data lama dari memori. Mekanisme penggusuran data Memcached menggunakan algoritme yang Paling Sedikit Digunakan Baru-Baru Ini dan secara sewenang-wenang mengeluarkan data yang ukurannya serupa dengan data baru.

Redis, sebaliknya, memungkinkan kontrol yang sangat baik atas penggusuran, memungkinkan Anda memilih dari enam kebijakan penggusuran yang berbeda. Redis juga menggunakan pendekatan yang lebih canggih untuk manajemen memori dan pemilihan kandidat penggusuran. Redis mendukung pengusiran lambat dan aktif, di mana data dikeluarkan hanya saat lebih banyak ruang diperlukan atau secara proaktif. 

Redis memberi Anda fleksibilitas yang jauh lebih besar terkait objek yang dapat Anda cache. Meskipun Memcached membatasi nama kunci hingga 250 byte dan hanya berfungsi dengan string biasa, Redis mengizinkan nama dan nilai kunci masing-masing berukuran 512 MB, dan aman untuk biner. Plus, Redis memiliki lima struktur data utama untuk dipilih, membuka dunia kemungkinan bagi pengembang aplikasi melalui caching cerdas dan manipulasi data cache.

Redis untuk persistensi data

Menggunakan struktur data Redis dapat menyederhanakan dan mengoptimalkan beberapa tugas — tidak hanya saat menyimpan dalam cache, tetapi bahkan ketika Anda ingin datanya tetap ada dan selalu tersedia. Misalnya, daripada menyimpan objek sebagai string berseri, pengembang dapat menggunakan Redis Hash untuk menyimpan bidang dan nilai objek, dan mengelolanya menggunakan satu kunci. Redis Hash membuat pengembang tidak perlu mengambil seluruh string, menghapusnya, memperbarui nilai, mengubah nama objek, dan mengganti seluruh string dalam cache dengan nilai barunya untuk setiap pembaruan sepele — itu berarti konsumsi sumber daya yang lebih rendah dan peningkatan kinerja.

Struktur data lain yang ditawarkan oleh Redis (seperti daftar, kumpulan, kumpulan yang diurutkan, hyperloglog, bitmap, dan indeks geospasial) dapat digunakan untuk mengimplementasikan skenario yang lebih kompleks. Kumpulan yang diurutkan untuk penyerapan dan analisis data deret waktu adalah contoh lain dari struktur data Redis yang menawarkan pengurangan yang sangat besar dan konsumsi bandwidth yang lebih rendah.

Keuntungan penting lainnya dari Redis adalah data yang disimpannya tidak buram, sehingga server dapat memanipulasinya secara langsung. Sebagian besar dari 180 lebih perintah yang tersedia di Redis dikhususkan untuk operasi pemrosesan data dan menanamkan logika di penyimpanan data itu sendiri melalui skrip Lua sisi server. Perintah bawaan dan skrip pengguna ini memberi Anda fleksibilitas dalam menangani tugas pemrosesan data secara langsung di Redis tanpa harus mengirimkan data melalui jaringan ke sistem lain untuk diproses.

Redis menawarkan persistensi data opsional dan dapat disesuaikan yang dirancang untuk mem-bootstrap cache setelah pematian yang direncanakan atau kegagalan yang tidak direncanakan. Meskipun kami cenderung menganggap data dalam cache sebagai volatile dan sementara, menyimpan data ke disk bisa sangat berharga dalam skenario caching. Memiliki data cache tersedia untuk dimuat segera setelah restart memungkinkan pemanasan cache yang jauh lebih singkat dan menghilangkan beban yang terlibat dalam pengisian ulang dan penghitungan ulang konten cache dari penyimpanan data primer.

Redis replikasi data dalam memori 

Redis juga dapat mereplikasi data yang dikelolanya. Replikasi dapat digunakan untuk mengimplementasikan penyiapan cache yang sangat tersedia yang dapat menahan kegagalan dan menyediakan layanan tanpa gangguan ke aplikasi. Kegagalan cache hanya sedikit dari kegagalan aplikasi dalam hal dampak pada pengalaman pengguna dan kinerja aplikasi, jadi memiliki solusi yang terbukti menjamin konten cache dan ketersediaan layanan merupakan keuntungan utama dalam banyak kasus.

Last but not least, dalam hal visibilitas operasional, Redis menyediakan banyak metrik dan banyak perintah introspektif yang dapat digunakan untuk memantau dan melacak penggunaan dan perilaku abnormal. Statistik waktu nyata tentang setiap aspek database, tampilan semua perintah yang dijalankan, daftar, dan pengelolaan koneksi klien — Redis memiliki semua itu dan banyak lagi.

Ketika pengembang menyadari keefektifan ketekunan Redis dan kemampuan replikasi dalam memori, mereka sering menggunakannya sebagai basis data responden pertama, biasanya untuk menganalisis dan memproses data berkecepatan tinggi dan memberikan tanggapan kepada pengguna sementara basis data sekunder (seringkali lebih lambat) mempertahankan catatan sejarah tentang apa yang terjadi. Jika digunakan dengan cara ini, Redis juga ideal untuk kasus penggunaan analitik.

Redis untuk analisis data

Tiga skenario analitik segera muncul di benak Anda. Dalam skenario pertama, saat menggunakan sesuatu seperti Apache Spark untuk memproses kumpulan data besar secara berulang, Anda dapat menggunakan Redis sebagai lapisan penyajian untuk data yang sebelumnya dihitung oleh Spark. Dalam skenario kedua, menggunakan Redis sebagai penyimpanan data terdistribusi dalam memori yang dibagikan dapat mempercepat kecepatan pemrosesan Spark dengan faktor 45 hingga 100. Terakhir, skenario yang terlalu umum adalah di mana laporan dan analitik perlu disesuaikan dengan pengguna, tetapi mengambil data dari penyimpanan data batch inheren (seperti Hadoop atau RDBMS) membutuhkan waktu terlalu lama. Dalam kasus ini, penyimpanan struktur data dalam memori seperti Redis adalah satu-satunya cara praktis untuk mendapatkan paging sub-milidetik dan waktu respons.

Saat menggunakan set data operasional yang sangat besar atau beban kerja analitik, menjalankan semua yang ada di memori mungkin tidak hemat biaya. Untuk mencapai kinerja sub-milidetik dengan biaya lebih rendah, Redis Labs membuat versi Redis yang berjalan pada kombinasi RAM dan flash, dengan opsi untuk mengonfigurasi rasio RAM-ke-flash. Meskipun ini membuka beberapa cara baru untuk mempercepat pemrosesan beban kerja, ini juga memberi pengembang opsi untuk menjalankan "cache on flash" mereka.

Perangkat lunak sumber terbuka terus menyediakan beberapa teknologi terbaik yang tersedia saat ini. Dalam hal meningkatkan kinerja aplikasi melalui caching, Redis dan Memcached adalah kandidat yang paling mapan dan terbukti produksi. Namun, mengingat fungsionalitas Redis yang lebih kaya, desain yang lebih canggih, banyak potensi penggunaan, dan efisiensi biaya yang lebih besar dalam skala besar, Redis harus menjadi pilihan pertama Anda di hampir setiap kasus.

---

Itamar Haber (@itamarhaber) adalah kepala advokat pengembang di Redis Labs, yang menawarkan Memcached dan Redis sebagai layanan awan terkelola sepenuhnya untuk pengembang. Pengalamannya yang beragam meliputi pengembangan produk perangkat lunak dan peran kepemimpinan di Xeround, Etagon, Amicada, dan MNS Ltd. Itamar memegang gelar Master of Business Administration dari program bersama Kellogg-Recanati oleh Universitas Northwestern dan Tel-Aviv, serta gelar Sarjana Ilmu dalam Ilmu Komputer.

Forum Teknologi Baru menyediakan tempat untuk mengeksplorasi dan mendiskusikan teknologi perusahaan yang sedang berkembang secara mendalam dan luas. Pemilihannya subjektif, berdasarkan pilihan teknologi yang kami yakini penting dan paling menarik bagi pembaca. tidak menerima jaminan pemasaran untuk publikasi dan berhak untuk mengedit semua konten yang dikontribusikan. Kirim semua pertanyaan ke [email protected]