memcache vs memcached?

76

Chcę użyć memcached

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

Zainstalowałem to przez yum install memcached

Ale teraz muszę połączyć się z PHP, a istnieje rozszerzenie o nazwie memcache i jedno o nazwie memcached? ARGH

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

Czy ktoś mógłby skierować mnie tutaj we właściwym kierunku ... który z nich będzie działać?

Czy muszę też otwierać porty, aby działały, nawet jeśli są lokalne? Po uruchomieniu próbuję telnet 127.0.0.1 11211 i otrzymuję odmowę połączenia.

dzięki
źródło
24
Jeśli patrzysz teraz na to pytanie, pamiętaj, że zaakceptowana odpowiedź jest nieprawidłowa . Wybór rozwiązania opartego wyłącznie na nazwie jest niebezpieczny, szczególnie gdy projekt o lepszej nazwie jest gorszym projektem. Więcej informacji znajdziesz w innych odpowiedziach.
tylerl
@ dzięki, odznacz zaznaczoną odpowiedź. To tylko dezorientuje więcej osób przyjeżdżających tutaj późno. W międzyczasie zanegowałem niepoprawną odpowiedź i sugeruję, aby inni zrobili to samo, dopóki dziękiyo nie przejdzie do odznaczenia.
dołączył

Odpowiedzi:

24

Krótka odpowiedź: albo jednego z nich szukasz, ale moim pierwszym wyborem będzie memcache (pierwszy wymieniony przez ciebie), oparty wyłącznie na jego prawidłowym zastosowaniu nomenklatury.

Oto jak doszedłem do tego wniosku:

Oto krótkie wprowadzenie w konwencje nazewnictwa (dla tych, którzy nie znają), co tłumaczy frustrację zadawaną przez pytającego: w przypadku wielu aplikacji * nix część wykonująca pracę backendu nazywa się „demonem” (w systemie Windows „usługą” land), podczas gdy interfejs lub aplikacja kliencka służy do kontrolowania demona lub uzyskiwania do niego dostępu. Demon jest najczęściej nazywany tak samo jak klient, z dołączoną literą „d”. Na przykład „imap” to klient, który łączy się z demonem „imapd”.

Ta konwencja nazewnictwa jest wyraźnie przestrzegana przez memcache, gdy czytasz wprowadzenie do modułu memcache (zauważ różnicę między memcache i memcached w tym fragmencie):

Moduł Memcache zapewnia wygodny interfejs proceduralny i obiektowy dla memcached, wysoce efektywnego demona buforującego, który został zaprojektowany specjalnie w celu zmniejszenia obciążenia bazy danych w dynamicznych aplikacjach internetowych.

Moduł Memcache zapewnia również moduł obsługi sesji (memcache).

Więcej informacji o memcached można znaleźć na » http://www.danga.com/memcached/ .

Frustracja jest spowodowana przez autora rozszerzenia PHP, które zostało źle nazwane memcached , ponieważ ma taką samą nazwę jak rzeczywisty demon o nazwie memcached . Zauważ też, że we wstępie do memcached (moduł php) wspomina o libmemcached , czyli bibliotece współdzielonej (lub API) używanej przez moduł do uzyskiwania dostępu do demona memcached:

memcached to wysokowydajny system buforowania obiektów z pamięcią rozproszoną, o charakterze ogólnym, ale przeznaczony do przyspieszania dynamicznych aplikacji internetowych przez zmniejszenie obciążenia bazy danych.

To rozszerzenie używa biblioteki libmemcached do zapewnienia interfejsu API do komunikacji z serwerami memcached. Zapewnia również obsługę sesji (memcached).

Informacje na temat libmemcached można znaleźć na » http://tangent.org/552/libmemcached.html .

Podsumowując, oba są funkcjonalnie takie same, ale mają po prostu różnych autorów, a jeden z nich jest po prostu bardziej odpowiednio nazwany niż drugi.

Jessica McKinnon
źródło
70
Czy nazwa projektu jest naprawdę odpowiednim powodem, aby wybrać jedną implementację nad drugą?
David Pashley,
4
David: Niezupełnie ... ale z pewnością wystarczający powód, aby zostawić konkretną implementację do końca w moich testach, tym samym skutecznie dając pierwszeństwo innym. Najprawdopodobniej nadal wypróbowałbym wszystkie dostępne implementacje, ale błędy techniczne w opisach oprogramowania autora powodują, że zastanawiam się, jakie wady techniczne mogą leżeć w oprogramowaniu. Przeczytałem jednak twój komentarz na temat samego oprogramowania, dlatego też głosowałem za odpowiedzią. :-)
Jessica McKinnon
4
Nigdy nie myślałem, że „d” w memcached oznacza deamon, ale oznacza imiesłów bierny czasownika z pamięci podręcznej. Ponadto nie można nazwać nowego interfejsu jako „memcache”, ponieważ był już taki o tej nazwie.
GetFree
9
Ilość błędów i to, czy rozszerzenie jest aktywnie rozwijane, jest o wiele ważniejsze niż analne podejście do problematycznych problemów. Poważnie, nie powinieneś nawet myśleć o testowaniu jednego rozszerzenia ze względu na coś takiego, to zupełnie nie do
zniesienia
12
Eee, oba nie są funkcjonalnie takie same: memcachedna przykład obsługuje tokeny cas, memcachenie. Jeśli ich potrzebujesz, wiesz, które (źle nazwane lub nie) wybrać.
Wrikken
56

Prawdopodobnie chcesz zobaczyć porównanie klienta PHP .

Krótka wersja: Oba będą działać, aw większości przypadków jedno z nich będzie w porządku.

Jeśli chodzi o drugi problem: Tak, powinieneś być w stanie to zrobić telnet 127.0.0.1 11211. Bardzo niewiele zapór blokowałoby komunikację hosta lokalnego z samym sobą. Jeśli nie możesz się połączyć, sprawdź, czy memcached naprawdę działa ps auxwww | grep memcached, co spowoduje także wyświetlenie argumentów wiersza poleceń używanych do uruchomienia memcached. Jednym z argumentów powinien być -p 11211inny numer portu. Sprawdź man memcachedznaczenie wszystkich możliwych argumentów.

Nate
źródło
2
Upvote za dodanie niektórych kroków rozwiązywania problemów.
Jessica McKinnon,
To jest naprawdę jasna odpowiedź.
danidacar,
@Nate, Co to jest odpowiednik systemu Windows ps auxwww | grep memcached?
Pacerier
1
@Pacerier: spójrz na superuser.com/questions/415360/… . Process Explorer to najprostszy sposób na znalezienie uruchomionego procesu i sprawdzenie jego argumentów wiersza poleceń.
Nate
@Pacerier to polecenie sprawdzające, czy proces serwera jest uruchomiony i sprawdzające, jak zostało wywołane.
Jasen
27

Jak sugeruje link Nate'a, oba działają idealnie dobrze dla prostego użytkowania. Memcached obsługuje jednak więcej funkcji, które pozwalają uzyskać najlepszą wydajność memcached. Protokół binarny zmniejsza ilość danych wymaganych do wysłania między klientem a serwerem. Multigety i multisety umożliwiają uzyskanie / ustawienie wielu elementów jednocześnie. Jeśli okaże się, że potrzebujesz więcej pamięci poza memcache, lepszym modułem jest memcached. Zastosowanie libmemcached sugeruje, że sama biblioteka jest prawdopodobnie bardziej zoptymalizowana niż wersja tylko PHP.

Memcached to nowszy moduł w porównaniu do memcache, który został wydany zaledwie 8 miesięcy temu. Jeśli musisz celować w starszą wersję PHP, możesz naprawdę używać tylko memcache.

David Pashley
źródło
Świetne wyjaśnienie!
Jan
21

Nazywa się to starszym, cholernym, php-memcacheponieważ wydawało się to najbardziej odpowiednią nazwą. Nowsza, lepsza wersja opracowana niezależnie przez ludzi z Digg została nazwana php-memcachedw trosce o jednoznaczność.

Ludzie, którzy poleciliby ci wybieranie jednego na drugim wyłącznie na podstawie poprawności nazwy, naprawdę nie mają działalności oferującej porady techniczne.

tylerl
źródło
6

Korzystając ostatnio z php-memcache, muszę cię wskazać na php-memcached.

Oto kilka powodów z góry mojej głowy ...

1) Nie ma metody getErrorCode () ani równoważnej, więc jeśli get () zwróci FAŁSZ, nie będziesz miał pojęcia, czy dzieje się tak, ponieważ wartość przechowywana w memcache JEST fałszywa, czy też wystąpił jakiś problem.

2) Jego algorytm mieszania dla spójnego mieszania wydaje się różnić od innych implementacji, takich jak wiele bibliotek klienckich zbudowanych z libmemcached. Oznacza to, że jeśli chcesz używać tego samego klastra memcache z wieloma językami, prawdopodobnie będziesz mieć problemy z przechowywaniem wartości w kliencie PHP, a inni klienci go nie znajdą.


źródło
3

Oba mają problemy na dzień dzisiejszy. PECL / memcache jest stary i niezawodny, z kilkoma wyjątkami, gdy jest przestarzały. PECL / memcached 1.x jest w najlepszym razie wersją beta. Niektóre funkcje nie radzą sobie z klawiszami numerycznymi, przecieka połączenia podczas używania trwałych połączeń. Część (wszystko?) Jest naprawiana w GitHub i zostanie wydana w pewnym momencie w wersji 2.x, ale nie dzisiaj. Bardziej szczegółowa recenzja znajduje się na stronie http://brian.moonspot.net/php-memcached-issues

Brian Moon
źródło
PECL / memcached 1.x jest teraz stabilny; PECL / memcache 2.x jest ograniczony; PECL / memcache 3.x jest wysoce niestabilny.
aredridel
2

Pracuję nad książką „Expert PHP and MySQL”. O różnicach pisałem prawie to samo. To, co poleciłem, to PECL / memcached. # 1 - otacza w pełni funkcjonalną dobrze działającą bibliotekę C # 2 - jest ostatnio utrzymywana. # 3 - więcej funkcji. Brak dyskredytacji w stosunku do PECL / memcache.


źródło
0

Miałem kilka poważnych problemów z Drupalem 6 i php-pecl-memcached, w których czasy odpowiedzi były opóźnione nawet o 5 ms na połączenie i spowodowałyby, że jedna konkretna strona utworzyła 5 razy więcej połączeń niż przed zmianą na php-pecl-memcached . Zmiana na php-pecl-memcache naprawiła wszystkie problemy; opóźnienia i dodatkowe połączenia.

Ta odpowiedź ma na celu wyłącznie pomoc osobom używającym Drupala 6 i ewentualnie Drupala 7.

Spechal
źródło
-3
  • memcache to klient memcached (serwer)
  • libmemcached to także klient do memcached

I są inni klienci dla memcached, patrz http://code.google.com/p/memcached/wiki/Clients

Wytnij i wklej z sieci:

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 „Rozszerzenie PHP do współpracy z memcached przez bibliotekę libmemcached” To rozszerzenie używa biblioteki libmemcached do zapewnienia interfejsu API do komunikacji z serwerami memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache „rozszerzenie memcached” Memcached to demon buforowania zaprojektowany specjalnie dla dynamicznych aplikacji internetowych w celu zmniejszenia obciążenia bazy danych poprzez przechowywanie obiektów w pamięci. To rozszerzenie pozwala na pracę z memcached przez poręczne OO i interfejsy proceduralne.

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
użytkownik62392
źródło
6
Ta długa odpowiedź nie jest nawet bliska wyjaśnienia plakatu. Plakat już wie, że istnieje wielu klientów. Wymienienie ich i zaproponowanie alternatywnych nazw nie ułatwia wyboru właściwego.
Martijn Heemels,