Kapan saya harus menggunakan Memcache alih-alih Memcached?

321

Tampaknya PHP memiliki dua pustaka memcached bernama memcache dan memcached . Apa perbedaannya dan bagaimana Anda tahu mana yang harus digunakan? Apakah ada yang ketinggalan jaman? Tampaknya memcached menawarkan lebih banyak metode jadi saya akan berasumsi bahwa itu berarti telah memiliki pengembangan paling banyak - tetapi juga tampaknya memerlukan pustaka C / C ++ eksternal jadi saya tidak yakin apakah saya dapat menginstalnya.

Tampaknya memcache telah ada lebih lama, tidak memerlukan perpustakaan tambahan, dan memiliki binari yang telah dikompilasi sebelumnya untuk windows! Saya akan berpikir bahwa itu akan menjadi pilihan yang lebih baik untuk saat ini. Namun, karena baru memcached (server) saya tidak yakin apakah ada beberapa fitur super penting dalam memcached (php) yang membuatnya sepadan dengan masalah ekstra.

Xeoncross
sumber
1
ZendCon memiliki episode yang bagus membandingkan keduanya. ZendCon Sessions Episode 040: Memcached: antarmuka Memcache yang lebih baik
John Magnolia
duplikat serverfault.com/questions/63383/memcache-vs-memcached oleh hanya beberapa hari, tetapi ini mendapat lebih banyak pandangan dan suara :)
Stefano

Jawaban:

249

Pustaka klien memcached baru-baru ini dirilis sebagai stabil. Ini digunakan oleh digg (dikembangkan untuk digg oleh Andrei Zmievski, sekarang tidak lagi dengan digg) dan mengimplementasikan jauh lebih banyak protokol memcached daripada klien memcache yang lebih tua. Fitur terpenting yang dimiliki memcached adalah:

  1. Cas token . Ini membuat hidup saya jauh lebih mudah dan merupakan sistem pencegahan yang mudah untuk data basi. Setiap kali Anda menarik sesuatu dari cache, Anda dapat menerima dengan itu token cas (angka ganda). Anda dapat menggunakan token itu untuk menyimpan objek yang diperbarui. Jika tidak ada orang lain yang memperbarui nilai saat utas Anda berjalan, swap akan berhasil. Kalau tidak, token cas yang lebih baru telah dibuat dan Anda dipaksa untuk memuat ulang data dan menyimpannya lagi dengan token baru.
  2. Membaca melalui panggilan balik adalah hal terbaik sejak mengiris roti. Ini telah menyederhanakan banyak kode saya.
  3. getDelayed () adalah fitur bagus yang dapat mengurangi waktu skrip Anda harus menunggu hasil kembali dari server.
  4. Meskipun server memcached seharusnya sangat stabil, itu bukan yang tercepat. Anda dapat menggunakan protokol biner alih-alih ASCII dengan klien yang lebih baru.
  5. Setiap kali Anda menyimpan data yang kompleks ke dalam memcached, klien biasanya melakukan serialisasi nilai (yang lambat), tetapi sekarang dengan klien memcached Anda memiliki opsi untuk menggunakan igbinary . Sejauh ini saya belum memiliki kesempatan untuk menguji seberapa besar perolehan kinerja ini.

Semua poin ini sudah cukup bagi saya untuk beralih ke klien terbaru, dan dapat memberitahu Anda bahwa itu berfungsi seperti pesona. Ada ketergantungan eksternal pada libmemcached library, tetapi telah berhasil menginstalnya di Ubuntu dan Mac OSX, jadi tidak ada masalah sejauh ini.

Jika Anda memutuskan untuk memperbarui ke perpustakaan yang lebih baru, saya sarankan Anda memperbarui ke versi server terbaru dan juga memiliki beberapa fitur yang bagus. Anda perlu menginstal libevent untuk dikompilasi, tetapi di Ubuntu itu tidak banyak masalah.

Saya belum melihat adanya kerangka kerja mengambil klien memcached baru sejauh ini (meskipun saya tidak melacaknya), tapi saya kira Zend akan naik segera.

MEMPERBARUI

Zend Framework 2 memiliki adaptor untuk Memcached yang dapat ditemukan di sini

Miha Hribar
sumber
1
Jawaban luar biasa; juga, ketergantungan eksternal pada libmemcached sebenarnya merupakan nilai tambah, dalam hal ini, karena ini adalah salah satu klien yang lebih aktif dikembangkan.
Marc Bollinger
Sepakat. Ketergantungan eksternal libmcached tidak boleh dianggap masalah sama sekali, sama seperti libevent.
Miha Hribar
1
Hal Cas Tokens itu terdengar seperti nilai tambah terbesar. Sebenarnya, dari melihat fitur-fitur ini hampir seperti memcached lebih mengarah ke pemegang data yang dikelola, seperti DB, dan kurang seperti cache temp.
Xeoncross
Jika Anda mencari yang sudah memiliki memcachedb ( memcachedb.org ) yang sebenarnya hanya DB Berkley yang berbicara protokol memcached.
Miha Hribar
8
jawaban ini bahkan tidak memberi tahu perbedaan antara memcache dan memcached ?! Apakah memcache hanya versi lama dari memcached?
Daniel W.
10

Saat menggunakan Windows, perbandingannya dipotong: memcachetampaknya merupakan satu-satunya klien yang tersedia.

rymo
sumber
Tidak bisakah Anda selalu menambahkan memcachedekstensi pada diri Anda sendiri?
Pacerier
1
Sepertinya ini tidak benar. commaster.net/content/installing-memcached-windows
Joe Leonard
@ JoLeonard dari halaman yang Anda tautkan ke: "Untuk berinteraksi dengan memcachedPHP, Anda perlu menginstal memcacheekstensi untuk PHP"
rymo
8

Ini adalah 2013. Lupakan komentar 2009. Demikian juga, jika Anda menjalankan beban lalu lintas yang serius, jangan merenungkan bagaimana cara melakukan-lakukan dengan memcache berbasis windows. Ketika berhadapan dengan skala yang sangat besar (500+ server web ujung depan) dan 20+ server database belakang dan replikasi (campuran mysql & mssql), sebuah peternakan server memcached (12 server dalam kelompok) mendukung beberapa aplikasi OLTP volume tinggi menjawab 25 ribu ~ 40K mc-> dapatkan panggilan per-detik. Panggilan-panggilan ini adalah mereka yang TIDAK harus mencapai basis data.

IMHO, penggunaan memcached ini memberikan penghematan SERIUS $$$, $$$ pada CAPEX untuk server & lisensi DB baru serta pada kontrak dukungan untuk desain komersial besar.

Mike Trest
sumber
48
Bagaimana ini menjawab pertanyaan tentang perbedaan antara 2 implementasi protokol memcache di php?
Marki555
9
Ini harus menjadi komentar.
Elijah Lynn
7

Memcached adalah API yang lebih baru, ia juga menyediakan memcached sebagai penyedia sesi yang bisa sangat bagus jika Anda memiliki server server.

Setelah versi ini masih sangat rendah 0,2 tetapi saya telah menggunakan keduanya dan saya tidak menemui masalah besar, jadi saya akan memcached karena ini baru.

RageZ
sumber
1
Keduanya sebenarnya berfungsi sebagai penangan sesi meskipun saya tidak akan pernah ingin menggunakannya untuk itu. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross
baik menangkap buruk saya, ya itu hanya benar-benar berguna pada server besar ketika io menjadi sangat penting, ditambah memcache tidak memvalidasi bahwa itu tidak akan menjatuhkan beberapa objek untuk mendapatkan memori sehingga sulit untuk mengetahui bagaimana skala hal-hal.
RageZ
1
Versi 0.2 sejak itu telah dilampaui oleh versi yang stabil 1.0.0.
Miha Hribar