memcache vs memcached?

76

Saya ingin menggunakan memcached

http://www.danga.com/memcached/

Saya telah menginstalnya yum install memcached

Tapi sekarang saya harus terhubung ke PHP, dan ada ekstensi bernama memcache dan satu bernama memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

Bisakah seseorang mengarahkan saya ke arah yang benar di sini .. mana yang akan bekerja?

Juga, apakah saya perlu membuka port apa saja agar bisa berfungsi meskipun itu lokal? Setelah menjalankannya, saya mencoba telnet 127.0.0.1 11211 dan koneksi saya ditolak.

terima kasih
sumber
24
Jika Anda melihat pertanyaan ini sekarang, harap diingat bahwa jawaban yang diterima salah . Memilih solusi hanya berdasarkan nama itu berbahaya, terutama ketika orang dengan nama yang lebih baik adalah proyek yang lebih buruk. Silakan lihat jawaban lain untuk informasi lebih lanjut.
tylerl
@ terima kasih, hapus centang jawaban yang Anda centang. Itu hanya akan membingungkan lebih banyak orang datang ke sini terlambat. Sementara itu, saya menurunkan jawaban yang salah dan menyarankan orang lain melakukan hal yang sama sampai thanksyo berhasil menghapusnya.
joedevon

Jawaban:

24

Jawaban singkatnya: Apa pun yang Anda cari, tetapi pilihan pertama saya adalah memcache (yang pertama kali Anda daftarkan), murni berdasarkan penggunaan tata nama yang benar.

Nah, inilah cara saya sampai pada kesimpulan itu:

Berikut ini adalah latar belakang cepat dalam konvensi penamaan (bagi mereka yang tidak terbiasa), yang menjelaskan frustrasi oleh penanya pertanyaan: Untuk banyak aplikasi * nix, karya yang melakukan pekerjaan backend disebut "daemon" (pikirkan "layanan" di Windows- land), sedangkan antarmuka atau aplikasi klien adalah apa yang Anda gunakan untuk mengontrol atau mengakses daemon. Daemon paling sering dinamai sama dengan klien, dengan huruf "d" ditambahkan padanya. Misalnya "imap" akan menjadi klien yang terhubung ke daemon "imapd".

Konvensi penamaan ini jelas dipatuhi oleh memcache ketika Anda membaca pengantar modul memcache (perhatikan perbedaan antara memcache dan memcached dalam kutipan ini):

Modul Memcache menyediakan antarmuka prosedural dan berorientasi objek yang berguna untuk memcached, daemon caching yang sangat efektif, yang dirancang khusus untuk mengurangi beban basis data dalam aplikasi web dinamis.

Modul Memcache juga menyediakan pengendali sesi (memcache).

Informasi lebih lanjut tentang memcached dapat ditemukan di » http://www.danga.com/memcached/ .

Frustasi di sini disebabkan oleh penulis ekstensi PHP yang diberi nama memcached , karena ia memiliki nama yang sama dengan daemon aktual yang disebut memcached . Perhatikan juga bahwa dalam pengantar memcached (modul php) , ia menyebutkan libmemcached , yang merupakan shared library (atau API) yang digunakan oleh modul untuk mengakses daemon memcached:

memcached adalah kinerja tinggi, sistem caching objek memori terdistribusi, bersifat generik, tetapi dimaksudkan untuk digunakan dalam mempercepat aplikasi web dinamis dengan mengurangi beban basis data.

Ekstensi ini menggunakan pustaka libmemcached untuk menyediakan API untuk berkomunikasi dengan server memcached. Ini juga menyediakan pengendali sesi (memcached).

Informasi tentang libmemcached dapat ditemukan di » http://tangent.org/552/libmemcached.html .

Singkatnya, keduanya secara fungsional sama, tetapi mereka hanya memiliki penulis yang berbeda, dan yang satu lebih sederhana disebutkan lebih tepat daripada yang lain.

Jessica McKinnon
sumber
70
Apakah nama proyek benar-benar alasan yang tepat untuk memilih satu implementasi dari yang lain?
David Pashley
4
David: Tidak cukup ... tapi itu tentu cukup alasan untuk meninggalkan implementasi tertentu sampai terakhir dalam pengujian saya, sehingga secara efektif memberikan preferensi kepada yang lain. Saya kemungkinan besar masih akan mencoba semua implementasi yang tersedia, tetapi kelemahan teknis dalam deskripsi perangkat lunak oleh penulis cenderung membuat saya bertanya-tanya tentang kelemahan teknis apa yang ada pada perangkat lunak. Saya memang membaca komentar Anda, tentang perangkat lunak yang sebenarnya, jadi saya memberi Anda upvote untuk jawaban Anda juga. :-)
Jessica McKinnon
4
Saya tidak pernah berpikir "d" dalam memcached berarti deamon tetapi berarti past participle dari kata kerja cache. Plus, Anda tidak bisa menamai antarmuka baru sebagai "memcache" karena sudah ada satu dengan nama itu.
GetFree
9
Jumlah bug dan apakah ekstensi dikembangkan secara aktif atau tidak jauh lebih penting daripada anal tentang yang bermasalah d. Serius, Anda tidak harus berpikir tentang menguji satu ekstensi terakhir karena sesuatu seperti itu, itu benar-benar tidak
berguna
12
Eh, keduanya tidak secara fungsional sama: memcachedmendukung cas token misalnya, memcachetidak. Jika Anda membutuhkannya, Anda tahu mana (nama buruk atau tidak) untuk memilih.
Wrikken
56

Anda mungkin ingin melihat Perbandingan Klien PHP .

Versi singkat: Keduanya akan berfungsi, dan untuk sebagian besar kasus, keduanya akan baik-baik saja.

Mengenai masalah lain: Ya, Anda harus bisa melakukannya telnet 127.0.0.1 11211. Sangat sedikit firewall yang akan memblokir localhost untuk berkomunikasi dengan dirinya sendiri. Jika Anda tidak dapat terhubung, pastikan memcached benar-benar berjalan dengan melakukan ps auxwww | grep memcached, yang juga akan menunjukkan kepada Anda argumen baris perintah yang digunakan untuk memulai memcached. Salah satu argumen harus -p 11211atau nomor port lain. Lihat man memcachedmakna semua argumen yang mungkin.

Nate
sumber
2
Suara positif untuk menambahkan beberapa langkah pemecahan masalah.
Jessica McKinnon
Ini benar-benar jawaban yang jelas.
danidacar
@Nate, Apa yang setara dengan Windows ps auxwww | grep memcached?
Pacerier
1
@Pacerier: Lihatlah superuser.com/questions/415360/… . Process Explorer adalah cara termudah untuk menemukan proses yang sedang berjalan dan melihat argumen command-line-nya.
Nate
@Pacerier perintah itu memeriksa apakah proses server sedang berjalan dan melihat bagaimana itu dipanggil.
Jasen
27

Seperti yang ditunjukkan oleh tautan Nate, keduanya bekerja dengan sangat baik untuk penggunaan sederhana. Namun, memcached mendukung lebih banyak fitur yang memungkinkan Anda untuk mendapatkan kinerja maksimal dari memcached. Protokol biner mengurangi jumlah data yang diperlukan untuk dikirim antara klien dan server. Multiget dan multiset memungkinkan Anda untuk mendapatkan / mengatur banyak item sekaligus. Jika Anda merasa perlu lebih banyak tenaga dari memcache, memcached adalah modul yang lebih baik. Penggunaan libmemcached menunjukkan bahwa perpustakaan itu sendiri mungkin lebih dioptimalkan daripada versi PHP saja.

Memcached adalah modul yang lebih baru dibandingkan dengan memcache, yang baru dirilis 8 bulan lalu. Jika Anda perlu menargetkan versi PHP yang lebih lama, maka Anda hanya bisa menggunakan memcache.

David Pashley
sumber
Penjelasan hebat!
john
21

Yang lebih tua, buggier disebut php-memcachekarena itu sepertinya nama yang paling tepat. Versi yang lebih baru dan lebih baik yang dikembangkan secara independen oleh orang-orang di Digg malah disebut php-memcacheduntuk kepentingan disambiguasi.

Orang-orang yang akan merekomendasikan Anda memilih satu dari yang lain hanya berdasarkan kebenaran nama yang benar-benar tidak memiliki bisnis yang menawarkan saran teknis.

tylerl
sumber
6

Setelah menggunakan php-memcache baru-baru ini, saya harus mengarahkan Anda ke php-memcached.

Berikut adalah beberapa alasan dari atas kepala saya ..

1) Tidak ada getErrorCode () atau metode yang setara, jadi jika get () mengembalikan FALSE, Anda tidak akan tahu apakah itu karena nilai yang disimpan dalam memcache IS false, atau apakah ada semacam masalah.

2) Algoritme hashing-nya untuk hashing yang konsisten tampaknya berbeda dari implementasi lainnya, seperti banyak pustaka klien yang dibangun dari libmemcached. Ini berarti bahwa jika Anda ingin menggunakan cluster memcache yang sama dengan beberapa bahasa, Anda mungkin akan memiliki masalah di mana Anda akan menyimpan nilai dengan klien PHP, dan klien lain tidak akan menemukannya.


sumber
3

Keduanya memiliki masalah pada hari ini. PECL / memcache sudah tua dan dapat diandalkan, dengan beberapa pengecualian jika sudah usang. PECL / memcached 1.x adalah beta di terbaik. Beberapa fungsi tidak berurusan dengan kunci numerik, itu bocor koneksi saat menggunakan koneksi persisten. Beberapa (semua?) Sedang diperbaiki di GitHub dan akan dirilis pada titik 2.x, tetapi tidak hari ini. Untuk ulasan yang lebih rinci lihat http://brian.moonspot.net/php-memcached-issues

Brian Moon
sumber
PECL / memcached 1.x sekarang stabil; PECL / memcache 2.x terbatas; PECL / memcache 3.x sangat tidak stabil.
aredridel
2

Saya sedang mengerjakan buku "Expert PHP dan MySQL". Saya menulis hal yang hampir sama tentang perbedaan. Apa yang saya rekomendasikan adalah PECL / memcached. # 1 - itu membungkus di sekitar C library berperforma berfitur lengkap dengan baik # 2 - ini lebih baru dipertahankan. # 3 - lebih banyak fitur. Tidak meremehkan PECL / memcache.


sumber
0

Saya memiliki beberapa masalah yang cukup parah dengan Drupal 6 dan php-pecl-memcached di mana waktu respons tertunda hingga 5 ms per panggilan dan akan menyebabkan satu situs tertentu membuat panggilan 5x lebih banyak daripada sebelum perubahan ke php-pecl-memcached . Mengubah ke php-pecl-memcache memperbaiki semua masalah; panggilan latensi dan tambahan.

Jawaban ini di sini hanya untuk membantu mereka yang menggunakan Drupal 6 dan mungkin Drupal 7.

Spechal
sumber
-3
  • memcache adalah klien dari memcached (server)
  • libmemcached juga merupakan klien untuk memcached

Dan ada klien lain untuk memcached, lihat http://code.google.com/p/memcached/wiki/Clients

Potong & rekatkan dari web:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Ekstensi PHP untuk berinteraksi dengan memcached melalui pustaka libmemcached" Ekstensi ini menggunakan pustaka libmemcached untuk menyediakan API untuk berkomunikasi dengan server memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "memcached extension" Memcached adalah daemon caching yang dirancang khusus untuk aplikasi web dinamis untuk mengurangi beban basis data dengan menyimpan objek dalam memori. Ekstensi ini memungkinkan Anda untuk bekerja dengan memcached melalui antarmuka OO dan prosedural yang berguna.

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached
pengguna62392
sumber
6
Jawaban yang bertele-tele ini bahkan tidak mendekati memperjelas poster itu. Poster sudah sadar ada banyak klien. Mendaftarkannya, dan mengusulkan nama alternatif, tidak membuatnya lebih mudah untuk memilih yang benar.
Martijn Heemels