Apakah memcached dinosaurus dibandingkan dengan Redis? [Tutup]

185

Saya telah bekerja sedikit dengan memcached minggu-minggu terakhir dan baru tahu tentang Redis. Ketika saya membaca bagian dari readme mereka ini, tiba-tiba saya merasakan perasaan hangat dan nyaman di perut saya:

Redis dapat digunakan sebagai memcached pada steroid karena secepat memcached tetapi dengan sejumlah fitur lebih. Seperti memcached, Redis juga mendukung pengaturan timeout ke tombol sehingga kunci ini akan dihapus secara otomatis ketika sejumlah waktu berlalu.

Ini kedengarannya luar biasa. Saya juga menemukan halaman ini dengan tolok ukur: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Jadi, jujur ​​- Apakah memcache benar-benar dinousaur tua yang merupakan pilihan yang buruk dari perspektif kinerja bila dibandingkan dengan pendatang baru ini bernama Redis?

Saya belum pernah mendengar banyak tentang Redis sebelumnya, sehingga pendekatan untuk pertanyaan saya!

Industri
sumber
Bacaan tambahan yang menarik: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
Industri
9
tolok ukur ruturaj ini tidak terlalu menarik perhatian
dsomnus
2
Kami sudah mulai bereksperimen dengan Membase di tempat kerja, dan bahagia sejauh ini. Padahal, kita berasal dari Memcache, jadi memiliki setetes pengganti adalah nilai tambah yang bagus: membase.org
jayshao
2
Redis secepat memcached untuk tolok ukur non-dunia nyata dibuat. Itu tidak berarti lambat - itu tentu cukup cepat untuk sebagian besar beban kerja, tetapi hal-hal yang lebih cepat daripada memcached hanya mengungkapkan bug dalam memcached. Ini hampir selalu terhambat oleh perangkat keras atau desain aplikasi yang buruk.
Dustin
4
Saya terkejut kesucian-patroli-SO belum menutup pertanyaan ini sebagai tidak tepat dan tidak membantu.
Dogweather

Jawaban:

74

Memcache masih merupakan alat yang luar biasa dan SANGAT andal.

alih-alih melihat masalah ini dari perspektif menurunkan siapa yang lebih cepat pada kisaran <100 ms, lihat kinerja per "kelas" perangkat lunak.

  • Apakah hanya menggunakan ram lokal? -> tercepat
  • Apakah menggunakan ram jarak jauh? -> cepat
  • Apakah ini menggunakan ram plus hardddisk -> oh hurm.
  • Apakah hanya menggunakan harddisk -> jalankan!
Daniel
sumber
3
Tidak ada fasilitas untuk menangani replikasi dengan memcache yang saya tahu. Memcache murni dimaksudkan sebagai cache. Jika item dibersihkan / hilang, maka item tersebut perlu dibangun kembali. Saya belum pernah menggunakan ini sebelumnya atau sudah saya mengevaluasinya, tetapi ini mungkin menarik bagi Anda. code.google.com/p/memagent
Daniel
1
Membase mendukung protokol memcached tetapi juga kegigihan dan replikasi.
Jim Ferrans
1
Baru-baru ini saya melihat ethernet terikat, melintasi 4 port. 4 x 44MB / s. Ini membuat ram bahkan lebih berharga, dengan asumsi Anda bisa mendapatkan ethernet terikat!
Daniel
1
Demi referensi di masa mendatang, Facebook open source akan mcrouter baru-baru ini, yang menambahkan replikasi ke memcached. Hal-hal lain juga tanggal (redis super cepat sekarang, dll), tetapi FYI jika Anda di sini lima tahun kemudian ...
dannysauer
baik apa intinya? keduanya tidak dapat menyimpan direclty json array sederhana, format pertukaran DATA yang paling banyak digunakan di web, saya tidak tahu apa yang mereka pikirkan ... oh tunggu, mungkin saya harus menambahkan ReJSON karena pada dasarnya tidak ada yang peduli tentang JSON di dunia ini
PirateApp
205

Tergantung pada apa yang Anda butuhkan, secara umum saya berpikir bahwa:

  • Anda seharusnya tidak terlalu peduli dengan pertunjukan. Redis lebih cepat per inti dengan nilai-nilai kecil, tetapi memcached dapat menggunakan banyak core dengan satu port yang dapat dieksekusi dan TCP tanpa bantuan dari klien. Memcached juga lebih cepat dengan nilai besar di urutan 100k. Redis baru-baru ini banyak berkembang tentang nilai-nilai besar (cabang tidak stabil) tetapi masih memcached lebih cepat dalam kasus penggunaan ini. Intinya di sini adalah: tidak satu atau yang lain kemungkinan akan menjadi hambatan Anda untuk kueri per detik yang dapat mereka berikan.
  • Anda harus memperhatikan penggunaan memori. Untuk pasangan kunci-nilai sederhana, memcached lebih hemat memori. Jika Anda menggunakan hash Redis, Redis lebih hemat memori. Tergantung pada use case.
  • Anda harus peduli tentang ketekunan dan replikasi, dua fitur yang hanya tersedia di Redis. Sekalipun tujuan Anda adalah untuk membangun cache, ada baiknya setelah upgrade atau reboot data Anda masih ada.
  • Anda harus peduli dengan jenis operasi yang Anda butuhkan. Di Redis ada banyak operasi kompleks, bahkan hanya mempertimbangkan kasus penggunaan caching, Anda sering dapat melakukan lebih banyak dalam satu operasi, tanpa memerlukan data untuk diproses sisi klien (banyak I / O kadang-kadang diperlukan). Operasi ini seringkali secepat GET dan SET polos. Jadi, jika Anda tidak hanya perlu MENDAPATKAN / SET tetapi hal-hal yang lebih rumit Redis dapat banyak membantu (pikirkan pada caching waktu).

Tanpa use case sulit untuk memilih sekarang, tapi saya pikir untuk banyak hal Redis masuk akal karena bahkan ketika Anda tidak ingin menggunakannya sebagai DB, menjadi jauh lebih mampu Anda dapat memecahkan lebih banyak masalah, bukan hanya caching tetapi bahkan olahpesan, peringkat, dan sebagainya.

Tentu saja saya bisa menjadi bias karena saya adalah pengembang utama proyek Redis.

antirez
sumber
67
+1 untuk pengungkapan hebat di akhir
NateDSaint
6
Saya tidak yakin apakah ini kesalahan bahasa, tetapi jika Anda mengarahkan argumen Anda dengan "secara umum saya pikir Anda tidak perlu terlalu peduli dengan kinerja", itu adalah alasan serius yang perlu diperhatikan. Redis mungkin sangat baik untuk kelas masalah tertentu tetapi, secara tradisional, memcache telah digunakan secara khusus untuk memecahkan masalah kinerja dengan database yang persisten. Saya juga berpikir kelalaian mencolok dari daftar Anda adalah kematangan produk. Memcache adalah produk matang dengan pengalaman sekitar satu dekade. Redis menjanjikan, tetapi baru sekitar 3 tahun.
DougW
1
@ DougW Anda mengeluarkan frasa ini di luar konteks. Lebih masuk akal bila Anda membaca frasa yang menutup paragraf tepat setelah: "Intinya di sini adalah: tidak ada satu atau yang lain yang akan menjadi penghambat Anda untuk kueri per detik yang dapat mereka berikan"
Dinei
83

Jadi, jujur ​​- Apakah memcache benar-benar dinousaur tua yang merupakan pilihan yang buruk dari perspektif kinerja bila dibandingkan dengan pendatang baru ini bernama Redis?

  • Membandingkan fitur yang ditetapkan kemudian Redismemiliki fungsionalitas yang jauh lebih banyak;
  • Membandingkan kemudahan instalasi Redisjuga jauh lebih mudah. Tidak diperlukan dependensi;
  • Membandingkan pengembangan aktif Redisjuga lebih baik;
  • Saya percaya memcachedsedikit lebih cepat daripadaRedis . Sama sekali tidak menyentuh disk;
  • Pendapat saya adalah Redisproduk yang lebih baik daripada memcached.
Alfred
sumber
31
redis hanya menyentuh disk jika Anda memintanya. Biasanya, ia melakukan fsync setiap detik atau lebih -> Anda tidak akan menyadarinya
Marc Seeger
1
@ Mark ya. Saya juga percaya Anda bisa mengatakannya untuk tidak menyentuh disk sama sekali, tetapi standar saya percaya itu selalu fsyncs sekarang?
Alfred
3
Juga, dalam pengalaman saya, Redis sedikit lebih cepat daripada Memcached (saat menggunakan Redis dalam mode hanya memori). Antirez membuat tes di sini antirez.com/post/redis-memcached-benchmark.html
Sune Rievers
10
PERBEDAAN BESAR: Memcached multi-threaded dan Redis tidak. Jadi, sementara latensi satu permintaan dapat dibandingkan, Memcached dapat melayani lebih banyak permintaan saat konkurensi tinggi. Redis di sisi lain akan mencapai puncak kinerja dengan hanya beberapa permintaan bersamaan karena hanya menggunakan 1 cpu core / thread. Metode yang disarankan untuk menghindari ini adalah menjalankan beberapa instance Redis pada satu mesin dengan hashing yang konsisten, tetapi ini adalah solusi yang sangat buruk. Jadi, jika Anda membutuhkan konkurensi tinggi dan memiliki multi-core CPU (yang tidak), Memcached JAUH lebih cepat.
ColinM
2
@ Alfred, itu bukan fakta tersembunyi bahwa Redis adalah single-threaded, itu adalah keputusan desain (kesederhanaan atas ketahanan) oleh penulis. Artikel yang dihubungkan dengan Dustin di atas adalah bukti kuat bahwa ia memiliki dampak nyata. Juga saya telah mengkonfirmasi ini di tolok ukur saya sendiri menggunakan Redis sebagai backend Zend_Cache; karena konkurensi meningkat, Redis akan lebih cepat dibandingkan dengan memcached.
ColinM
46

Apa yang dilakukan memcached yang tidak dilakukan Redis adalah penggusuran nilai yang paling baru digunakan dari cache. Dengan memcached, Anda dapat dengan aman mengatur nilai sebanyak yang Anda suka, dan ketika mereka meluap memori, yang belum Anda gunakan baru-baru ini akan dihapus. Dengan Redis, Anda hanya dapat memperkirakan ini, dengan mengatur batas waktu untuk semuanya; ketika perlu mengosongkan memori, itu akan melihat tiga kunci acak dan menghapus satu yang paling dekat dengan kedaluwarsa.

Itulah perbedaan utama, jika Anda hanya menggunakannya sebagai cache.

Peter Scott
sumber
13

Anda mungkin juga ingin melihat Membase.

http://www.northscale.com/products/membase_server.html

Saya belum menggunakannya, tetapi tampaknya mirip dengan Redis dalam hal ini adalah toko KV memori-sentris dengan ketekunan. Perbedaan utama dari apa yang dapat saya lihat adalah:

  • Redis memiliki lebih banyak kemampuan manipulasi data (set yang dipesan, dll.)
  • Redis memiliki proyek Redis Cluster yang tertunda untuk menambah skalabilitas horizontal
  • Redis memiliki tier tunggal data offload to disk (VM) berdasarkan algoritma hybrid yang mempertimbangkan LRU dan ukuran objek.

  • Membase menggunakan protokol kawat memcached - berguna sebagai jalur peningkatan untuk aplikasi yang ada

  • Membase diatur ke skala secara horizontal menggunakan pendekatan hashtable terdistribusi
  • Membase dapat mendukung berbagai tingkatan pembongkaran data menggunakan pendekatan LRU (sangat jarang digunakan untuk disk, barang yang jarang masuk ke SSD, barang yang sering tetap dalam RAM)
  • Tidak yakin tentang kemampuan TTL di Membase.

Pilihannya mungkin tergantung pada sejauh mana aplikasi Anda dapat memanfaatkan fungsionalitas manipulasi data tambahan di Redis.

HikeOnPast
sumber
Hai Dean, terima kasih untuk posting Anda. Saya pasti akan memeriksanya. Bisakah saya menggunakan Membase di PHP?
Industri
4
Karena Membase menggunakan protokol memcached, klien memcached mana pun harus bekerja: wiki.membase.org/bin/view/Main/Clients
HikeOnPast
Membase mendukung TTL. Semua dukungan implementasi Memcache memberikan waktu kedaluwarsa. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav