Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Redis vs. Memcached – Perbandingan 2021

Redis adalah singkatan dari RE lebih banyak DI tindakan S erver, dibuat pada tahun 2009 oleh Salvatore Sanfilippo. Memcached, di sisi lain, dibuat pada tahun 2003 oleh Brad Fitzpatrick. Baik Redis dan Memcached adalah:

  • Struktur data dalam memori NoSQL
  • Ditulis dalam C
  • Sumber terbuka
  • Digunakan untuk mempercepat aplikasi
  • Mendukung latensi sub-milidetik

Pada tahun 2014, Salvatore menulis posting StackOverflow yang sangat baik tentang saat lebih masuk akal untuk menggunakan Memcached daripada Redis. Dalam postingan ini, kami memberikan perbandingan terkini dan mendetail antara Redis dan Memcached sehingga Anda dapat membuat pilihan yang tepat tentang penggunaannya di aplikasi Anda.

Infografis

Posting ini telah diringkas menjadi infografis di bawah ini. Dengan infografis ini Anda dapat dengan mudah memvisualisasikan hasil perbandingan ini untuk melihat mana yang keluar di atas dalam skenario yang berbeda. Jika Anda ingin membaca perbandingan dalam format teks, klik di sini.

Dokumentasi

Untuk memulai, Redis didokumentasikan jauh lebih komprehensif daripada Memcached. Ini membuatnya lebih mudah untuk dipelajari, dikelola, dan digunakan.

Model Basis Data

Redis pada dasarnya adalah penyimpanan nilai kunci. Sementara kunci adalah string biner, keuntungan dengan Redis adalah bahwa nilainya tidak terbatas hanya pada string biner. Mereka dapat berupa berbagai struktur data yang memungkinkan penyimpanan objek kompleks dan menyediakan serangkaian operasi yang kaya di atasnya. Redis juga menyediakan ekstensibilitas melalui modul Redis. Modul Redis adalah ekstensi yang menyediakan struktur dan fitur data tambahan yang tidak tersedia dalam kumpulan fitur inti. Berikut ini contoh beberapa fitur yang sekarang tersedia sebagai modul:

  • Toko Dokumen
  • Grafik DBMS
  • Mesin Telusur
  • DBMS Deret Waktu

Memcached adalah penyimpanan nilai kunci biasa yang hanya mendukung string biner sebagai nilai.

Struktur Data

Seperti disebutkan di atas, Redis menawarkan beberapa tipe struktur data yang memungkinkannya menjadi sangat fleksibel untuk digunakan, termasuk Strings, Hash, Lists, Sets, Sorted Sets, Bitmaps, Bitfields, HyperLogLog, Indeks geospasial, dan Aliran. Anda dapat mempelajari lebih lanjut tentang ini di artikel Kasus Penggunaan Redis Teratas menurut Jenis Struktur Data Inti.

Sumber gambar:https://redislabs.com/redis-enterprise/data-structures/

Memcached hanya mendukung string biner biasa yang bagus untuk data hanya-baca, jadi jika Anda tidak memerlukan semua fitur Redis, Memcached adalah database yang lebih sederhana untuk Anda untuk digunakan.

Peringkat &Popularitas Basis Data

Popularitas yang lebih besar dari basis data menghasilkan komunitas pengguna yang lebih besar, lebih banyak diskusi dan tutorial yang dibuat pengguna, dan lebih banyak bantuan dan dukungan melalui alat pihak ketiga seperti platform DBaaS dan alat analisis untuk membantu mengoptimalkan penerapan Anda.

Redis adalah database paling populer ke-8 di dunia per Februari 2021, menurut DB-Engine karena kesederhanaannya, struktur data yang kaya, dan dokumentasi yang hebat. Memcached saat ini menduduki peringkat ke-28 sebagai database terpopuler. Ketika Redis dan Memcached diberi peringkat sehubungan dengan model basis data nilai kunci, Redis berada di posisi 1 dan Memcached berada di urutan ke-4. Namun, jika Anda hanya mencari database nilai kunci sumber terbuka, atau database yang dapat digunakan di lokasi, Memcached berada di urutan kedua karena Amazon DynamoDB dan Microsoft Azure Cosmos DB keduanya merupakan database komersial yang hanya dapat digunakan di awan.

Arsitektur

Redis dan Memcached keduanya mengikuti client-server Arsitektur. Klien mengisi data di server dalam bentuk nilai kunci.

Redis adalah utas tunggal di mana di sisi lain Memcached memiliki arsitektur multithread. Memcached menskalakan lebih baik pada sistem dengan lebih banyak inti yang dapat menangani lebih banyak operasi jika kapasitas komputasi diskalakan. Namun, lebih dari satu instans Redis dapat dimulai pada sistem yang sama untuk menggunakan inti tambahan.

Kemudahan Penggunaan

Seperti dijelaskan di atas di bagian model Database, Redis, sebagai database multi-model, dapat digunakan dengan semua jenis model data. Di Redis, mudah untuk menulis kode karena menyederhanakan tugas-tugas kompleks. Redis memiliki struktur data tingkat lanjut dan tidak terbatas pada nilai string sederhana. Misalnya, jika aplikasi Anda menyimpan data dalam kumpulan dan Anda ingin melacak kumpulan dalam daftar, Anda dapat melakukannya dengan mudah di Redis. Tugas serupa di Memcached tidak dimungkinkan. Tetapi ada cara lain untuk melakukan tugas yang sama yang membutuhkan lebih banyak baris kode.

Memcached, di sisi lain, hanya menyimpan nilai string biasa. Jadi, aplikasi dibiarkan menangani kompleksitas struktur data.

Partisi Data

Redis mendukung partisi data di beberapa instance node. Pengguna Redis saat ini memanfaatkan teknik yang berbeda seperti partisi rentang, partisi hash, dan hashing yang konsisten untuk partisi data. Di Redis, partisi data dapat diimplementasikan dalam tiga cara berbeda:

  • Partisi sisi klien
  • Partisi yang dibantu proxy (contoh:twemproxy)
  • Partisi sisi server dengan perutean kueri dalam node cluster

Memcached juga mendukung partisi data di beberapa node, dan hashing yang konsisten adalah pendekatan yang disarankan untuk memastikan beban lalu lintas terdistribusi secara merata.

Redis vs Memcached - Perbandingan 2021Klik Untuk Tweet

Bahasa yang Didukung

Redis mendukung hampir semua bahasa pemrograman yang paling banyak digunakan, dari bahasa tingkat tinggi hingga bahasa tingkat rendah. Memcached mendukung lebih sedikit bahasa dibandingkan dengan Redis, tetapi mendukung semua bahasa populer.

Memcache

  • .Net
  • C
  • C++
  • ColdFusion
  • Erlang
  • Jawa
  • Capek
  • Lua
  • OCaml
  • Perl
  • PHP
  • Python
  • Ruby

Merah

  • C
  • C#
  • C++
  • Clojure
  • Kristal
  • D
  • Panah
  • Ramuan
  • Erlang
  • Mewah
  • Pergi
  • Haskell
  • Haxe
  • Jawa
  • JavaScript (Node.js)
  • Capek
  • Lua
  • MatLab
  • Tujuan-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prolog
  • Data Murni
  • Python
  • R
  • Pemberontakan
  • Ruby
  • Karat
  • Skala
  • Skema
  • Obrolan ringan
  • Cepat
  • Tcl
  • Visual Basic

Transaksi

Redis "transaksi" dijalankan dengan tiga jaminan di bawah ini:

  • Transaksi diserialkan dan dijalankan secara berurutan
  • Semua perintah, atau tidak sama sekali, diproses (transaksi atom)
  • Penguncian yang optimis menawarkan jaminan ekstra menggunakan check-and-set

Redis memastikan bahwa semua hanya satu perintah dari satu mesin klien yang dieksekusi sekaligus. Semua perintah dalam transaksi dijalankan ketika perintah "EXEC" dipanggil untuk memastikan atomisitas.

Memcached, di sisi lain, tidak menyediakan manajemen transaksi.

Replikasi

Redis menawarkan replikasi pemimpin-pengikut (master-slave) sederhana yang membuat salinan persis dari instance master, dengan fitur berikut:

  • Master terus mengirimkan perintah data ke slave selama mereka terhubung.
  • Jika sambungan terputus, slave akan mengikuti sinkronisasi ulang sebagian hanya menyalin data yang terlewat selama pemutusan.
  • Jika sinkronisasi ulang sebagian tidak memungkinkan, maka sinkronisasi ulang penuh akan dicoba.

Anda juga dapat memanfaatkan fitur ketersediaan tinggi, Redis Sentinels atau Redis Cluster, untuk perlindungan failover lanjutan.

Native Memcached tidak mendukung replikasi, tetapi Anda dapat menggunakan Repcached, patch open source gratis untuk mencapai ketersediaan tinggi untuk penerapan Anda. Menawarkan replikasi multi master, replikasi data asinkron, dan mendukung semua perintah Memcached.

Snapshot/Kegigihan

Snapshots hanyalah tampilan read-only dari database Anda seperti pada titik waktu tertentu. Redis mendukung snapshot, dan secara default, Redis menyimpan snapshot dari kumpulan data pada disk dalam file biner yang disebut dump.rdb. Anda dapat memanggil snapshot secara manual, atau menyesuaikan frekuensi atau mengubah ambang batas untuk menjalankan operasi.

Berikut adalah dua opsi ketekunan yang didukung Redis:

  • Kegigihan RDB
  • Kegigihan AOF

RDB adalah singkatan dari "Redis Database Backup". Ini adalah snapshot database point-in-time yang ringkas pada waktu tertentu. Dibutuhkan lebih sedikit ruang, memaksimalkan kinerja Redis, dan bagus untuk pemulihan bencana.

AOF adalah singkatan dari "Tambahkan Hanya File". AOF melacak semua perintah yang dijalankan, dan dalam situasi bencana, AOF menjalankan kembali perintah untuk mendapatkan data kembali. Metode ini membutuhkan lebih banyak ruang karena semua perintah dieksekusi lagi, dan bukan metode snapshotting yang tahan lama.

Di sisi lain, memcache tidak mendukung persistensi disk.

Script Sisi Server

Lua adalah bahasa skrip tertanam untuk server Redis Anda, tersedia pada versi 2.6, yang memungkinkan Anda melakukan operasi di dalam Redis untuk menyederhanakan kode Anda dan meningkatkan kinerja. Dua fungsi utama yang digunakan untuk mengevaluasi skrip menggunakan interpreter Lua adalah:

  • EVAL
  • EVALSHA

Ketika skrip Lua sedang dieksekusi, semua permintaan lainnya diblokir seperti yang ditunjukkan pada gambar di bawah.

Redis juga menyertakan debugger skrip Lua di versi 3.2 yang membuat penulisan skrip kompleks menjadi lebih mudah dan membantu meningkatkan kinerja.

Memcached tidak mendukung skrip sisi server apa pun.

Skalabilitas

Ada dua teknik untuk menskalakan database Redis Anda secara horizontal:

  • Menambahkan pecahan di Cluster Redis
  • Menambahkan node ke penyiapan Redis HA (master/replika)

Anda juga dapat menskalakan pengaturan Redis secara vertikal saat membutuhkan lebih banyak memori atau komputasi. Ini dapat dilakukan tanpa waktu henti jika Anda memiliki pengaturan HA atau Anda menggunakan teknologi Redis Cluster.

Server Memcached tidak menyediakan mekanisme untuk mendistribusikan data di seluruh node (sharding). Jadi, di Memcached, skalabilitas horizontal semudah menambahkan lebih banyak node – masalah mempartisi data Anda menjadi pecahan yang berbeda harus dilakukan pada tingkat aplikasi/klien. Ada beberapa alat sumber terbuka yang dapat membantu Anda dalam hal ini.

Protokol Komunikasi

Redis menggunakan TCP sebagai protokol jaringan dan tidak mendukung UDP.

Memcached mendukung protokol komunikasi TCP dan UDP. Data dikirim ke server Memcached dalam dua bentuk:

  • Baris teks:Mengirim perintah dan menerima tanggapan dari server.
  • Data tidak terstruktur:Menerima atau mengirim informasi nilai untuk kunci tertentu, dan data dikembalikan dalam format yang sama dengan yang disediakan.

Kebijakan Penghapusan Cache yang Didukung

Redis mendukung berbagai jenis kebijakan penggusuran. Mari kita lihat beberapa.

  • pembatalan:  Dalam "noeviction" kesalahan dikembalikan saat memori mencapai batasnya.
  • allkeys-lru:  Lru adalah singkatan dari "least recent used". Kebijakan ini menghapus data yang paling jarang digunakan.
  • allkeys-lfu:  Lfu singkatan dari "paling jarang digunakan". Kebijakan ini menghapus data yang paling jarang digunakan.
  • semua kunci-acak:  Kebijakan ini menghapus data secara acak.
  • volatile-lru:  Data volatil dengan kumpulan data kedaluwarsa. Kebijakan ini menghapus data volatil yang paling jarang digunakan.
  • volatil-lfu:  Data volatil dengan kumpulan data kedaluwarsa. Kebijakan ini menghapus data volatil yang paling jarang digunakan.
  • volatile-random:  Kebijakan ini menghapus data yang mudah menguap secara acak.
  • volatile-ttl:  "TTL" berarti waktu untuk hidup. Kebijakan ini menghapus data yang memiliki waktu hidup tersingkat.

Memcached menggunakan algoritme LRU untuk mengeluarkan data saat diperlukan ruang. Ini pertama-tama mencari data yang sudah kedaluwarsa untuk dihapus jika data kedaluwarsa tidak tersedia, algoritma LRU digunakan.

Publikasikan &Berlangganan Pesan

Redis mendukung perpesanan Pub/Sub (terbitkan dan berlangganan). Ada tiga perintah yang digunakan untuk tujuan ini.

Klien menggunakan:

  • Berlangganan
  • Berhenti berlangganan

Berlangganan dan berhenti berlangganan digunakan untuk menerima pesan dari saluran tertentu.

Server menggunakan:

  • Terbitkan

"Publikasikan" digunakan untuk mendorong data ke klien.

Memcached tidak mendukung pengiriman pesan dan berlangganan.

Dukungan Streaming

Redis mendukung aliran seperti Kafka dengan versi 5.0 atau lebih tinggi menggunakan struktur data baru "Aliran Redis". Redis Streams memiliki konsep grup konsumen, seperti Apache Kafka, yang memungkinkan aplikasi klien menggunakan pesan secara terdistribusi, sehingga mudah untuk diskalakan dan membuat sistem yang sangat tersedia.

Memcached tidak menawarkan dukungan asli untuk Streaming, tetapi ada alat pustaka sumber terbuka seperti Kafcache untuk pemrosesan streaming dengan latensi rendah.

Dukungan Geospasial

Redis memiliki struktur data yang disebut indeks Geospasial yang menyimpan data garis bujur dan garis lintang suatu lokasi. Anda dapat melakukan operasi yang berbeda pada data geospasial, seperti menghitung jarak antara dua titik atau menemukan tempat terdekat.

Memcached tidak memiliki struktur data khusus untuk menangani data geospasial.

Kinerja

Perbandingan kinerja antara penyimpanan data nilai kunci dalam memori lebih merupakan latihan intelektual daripada kepentingan praktis apa pun – kecuali jika Anda menerapkan sistem pada skala sedemikian rupa sehingga ini menjadi menarik seperti tindakan penghematan biaya. Ini karena penyimpanan tersebut terikat IO dan biasanya latensi jaringan mungkin memainkan peran yang lebih besar dalam latensi yang dirasakan aplikasi daripada latensi database.

Aspek kinerja yang lebih praktis adalah efisiensi penyimpanan – berapa banyak data yang dapat dikemas dalam jumlah memori yang sama. Bahkan di sini, struktur data internal yang digunakan oleh Redis bervariasi berdasarkan ukuran data. Jadi, diskusi apa pun tentang kinerja antara basis data ini harus diambil dengan sedikit garam.

Mari kita lihat beberapa perbandingan yang ditampilkan dalam makalah penelitian tahun 2016. Dalam makalah ini, penulis bereksperimen dengan database dalam memori yang banyak digunakan untuk mengukur kinerjanya dalam hal:

  1. Waktu yang dibutuhkan untuk menyelesaikan operasi.
  2. Seberapa efisien mereka menggunakan memori selama operasi.

Versi database yang digunakan dalam makalah:

Database Versi
Redis 3.0.7
Memcached 1.4.14

Operasi Tulis

Saat menulis data, seperti yang Anda lihat, pada tabel di bawah Memcached menunjukkan kecepatan luar biasa bahkan setelah jumlah catatan bergerak hingga jutaan.

Waktu yang dihitung untuk menulis pasangan nilai kunci (md)

Jumlah catatan
Database 1.000 10.000 100.000 1.000.000
Redis 34 214 1,666 14.638
Memcached 23 100 276 2.813

Operasi Baca

Membaca data hampir konsisten di Redis bahkan untuk satu juta catatan tetapi di Memcached karena jumlah catatan meningkat, waktu juga meningkat sedikit.

Waktu yang berlalu untuk membaca nilai yang sesuai dengan kunci yang diberikan per database (md)

Jumlah catatan
Database 1.000 10.000 100.000 1.000.000
Redis 8 6 8 8
Memcached 9 14 14 30

Penggunaan Memori

Saat mendiskusikan penggunaan memori, Redis selalu yang terbaik seperti yang Anda lihat di hasil.

Penggunaan memori database dalam memori untuk operasi tulis (MB)

Jumlah catatan
Database 1.000 10.000 100.000 1.000.000
Redis 2,5 3.8 4.3 62,7
Memcached 5.3 27.2 211 264.9

Seperti yang Anda lihat, Redis lebih baik daripada Memcached.

Penggunaan memori dari database dalam memori untuk operasi penghapusan (MB)

Jumlah catatan
Database 1.000 10.000 100.000 1.000.000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2

Layanan/Dukungan Terkelola

Popularitas dan komunitas yang lebih besar untuk Redis juga mendorong kebutuhan akan layanan terkelola, hosting, dan dukungan. Penyedia database terkelola yang populer untuk Redis™* termasuk ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache, dan DigitalOcean. Halaman ini memberikan perbandingan hebat dari penyedia teratas untuk Redis™. Redis juga memiliki alat pelaporan internal yang ekstensif seperti cache hit, penggunaan memori, operasi, dan bahkan kueri lambat yang dicatat.

Layanan terkelola untuk Memcached jauh lebih sedikit tersedia, tetapi masih didukung melalui Amazon Elasticache.

Dukungan Keamanan Lapisan Transportasi (TLS)

Redis memiliki dukungan TLS asli mulai Redis 6.0. Versi Redis sebelumnya merekomendasikan penggunaan stunnel untuk menyediakan dukungan TLS.

Memcached 1.5.13 dan versi di atasnya mendukung otentikasi dan enkripsi melalui TLS. Fitur ini masih dalam tahap percobaan.

Otentikasi

Hingga Redis 5.x, Redis hanya mendukung otentikasi berbasis kata sandi sederhana. Kata sandi ini disimpan dalam plaintext di server. Redis di versi 6.0 dan seterusnya mendukung ACL berfitur lengkap.

Memcached versi 1.4.3 dan yang lebih baru memiliki dukungan SASL. Sebelumnya Memcached tidak memiliki lapisan otentikasi.

Ringkasan

Redis dan Memcached keduanya bagus dan memiliki aplikasi di area yang berbeda. Redis yang dikembangkan kemudian memiliki banyak fungsi lanjutan dan memiliki dokumentasi serta komunitas yang hebat.

Tertarik untuk mempelajari lebih lanjut tentang ScaleGrid?

Untuk mempelajari lebih lanjut tentang bagaimana ScaleGrid Hosting for Redis™* dapat membantu Anda mengelola database, lihat halaman ScaleGrid Service for Redis™ kami. Lihat bagaimana hosting ScaleGrid untuk Redis™ dapat membuat Anda lebih fokus mengembangkan produk, dan lebih sedikit mengelola database.

*Redis adalah merek dagang Redis Labs Ltd. Hak apa pun di dalamnya dilindungi oleh Redis Labs Ltd. Penggunaan apa pun oleh ScaleGrid hanya untuk tujuan referensi dan tidak menunjukkan sponsor, dukungan atau afiliasi antara Redis dan ScaleGrid.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memeriksa nil/null di Redis' Lua cjson?

  2. Bagaimana cara memindahkan database redis dari satu server ke server lain?

  3. Bagaimana cara mengembalikan flask render_template setelah pekerjaan latar belakang Redis selesai?

  4. Bagaimana cara membuat model dalam pola KERING dengan bantuan flow.js (untuk panggilan async) di node.js?

  5. redis + gevent - Performa buruk - apa yang saya lakukan salah?