memcache vs memcached?


76

Я хочу використовувати memcached

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

Я встановив це наскрізь yum install memcached

Але тепер мені потрібно підключитися до PHP, і є розширення з ім'ям memcache та ім'я memcached? ARGH

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

Чи міг би хтось вказати мене в потрібному напрямку .. який із них буде працювати?

Крім того, чи потрібно мені відкривати будь-які порти, щоб він міг працювати, навіть якщо він локальний? Після його запуску я спробую telnet 127.0.0.1 11211, і я отримаю відмову в зв’язку.


24
Якщо ви зараз дивитесь на це питання, майте на увазі, що прийнята відповідь неправильна . Вибирати рішення, що базується лише на назві, небезпечно, особливо коли той, хто має кращу назву, є гіршим проектом. Будь ласка, подивіться інші відповіді для отримання додаткової інформації.
tylerl

@thanksyo зніміть прапорці з відповіді, яку ви перевірили. Це просто заплутає більше людей, які приходять сюди пізно. Тим часом я спростував невірну відповідь і пропоную іншим зробити те саме, доки подякує, щоб зняти її.
joedevon

Відповіді:


24

Коротка відповідь: чи то, що ви шукаєте, але моїм першим вибором буде пам’ять (перший, який ви перерахували), суто виходячи з правильного використання номенклатури.

Тепер ось, як я прийшов до такого висновку:

Ось швидкий передумови в іменуванні конвенцій (для незнайомих), який пояснює розчарування запитувачем запитання: Для багатьох програм * nix, шматок, який виконує роботу бекенда, називається "демон" (подумайте, "сервіс" у Windows- land), тоді як інтерфейс або клієнтська програма - це те, що ви використовуєте для управління або доступу до демона. Демон найчастіше називають таким же, як клієнт, до нього додається літера "d". Наприклад, "imap" - це клієнт, який підключається до демона "imapd".

Ця умова іменування чітко дотримується в memcache, коли ви читаєте вступ до модуля memcache (помічайте відмінність memcache від memcache у цьому уривку):

Модуль Memcache забезпечує зручний процедурний та об'єктно-орієнтований інтерфейс для запам’ятованого високоефективного демона кешування, який був спеціально розроблений для зменшення завантаження бази даних у динамічних веб-додатках.

Модуль Memcache також забезпечує обробник сеансу (memcache).

Більше інформації про запам’ятовування можна знайти на веб-сайті » http://www.danga.com/memcached/ .

Розчарування тут викликає автор розширення PHP, яке було погано названо memcached , оскільки воно має те саме ім'я, що і власне демон, що називається memcached . Зауважте також, що у вступі до memcached (php-модуля) він згадує libmemcached , який є спільною бібліотекою (або API), яка використовується модулем для доступу до згаданого демона:

memcached - це високоефективна розподілена система кешування об'єктів пам'яті, загальна за своєю природою, але призначена для використання для прискорення динамічних веб-додатків шляхом зменшення завантаження бази даних.

Це розширення використовує бібліотеку libmemcached для надання API для спілкування з кешованими серверами. Він також забезпечує обробник сеансу (запам'ятовується).

Інформацію про libmemcached можна знайти на веб-сайті » http://tangent.org/552/libmemcached.html .

Підсумовуючи це, обидва функціонально однакові, але вони просто мають різних авторів, і один просто названий більш доречним, ніж інший.


70
Чи справді назва проекту є справжньою підставою для вибору однієї реалізації над іншою?
Девід Пашлі

4
Девід: Не зовсім ... але, безумовно, достатньо причин залишити певну реалізацію до останнього в моєму тестуванні, тим самим ефективно віддаючи перевагу іншим. Я, швидше за все, все ж спробую всі доступні реалізації, але технічні недоліки в описі програмного забезпечення автором, як правило, змушують мене замислюватися про те, які технічні недоліки можуть полягати в програмному забезпеченні. Хоча я прочитав ваш коментар щодо власне програмного забезпечення, тож я дав вам нагороду і за вашу відповідь. :-)
Джессіка МакКіннон

4
Я ніколи не думав, що "d" у memcached означає deamon, але щоб означати минулий дієприкметник кеша дієслова. Крім того, ви не можете назвати новий інтерфейс як "memcache", оскільки вже був такий з цим ім'ям.
GetFree

9
Кількість помилок і те, чи активно розроблено розширення, є набагато важливішим, ніж бути анальним щодо проблемних d. Серйозно, ви навіть не повинні думати про те, щоб останнє тестування одного розширення через щось подібне, це повністю відбивається
Fake51

12
Erm, обидва функціонально не однакові: наприклад, memcachedпідтримує лексеми cas, memcacheне робить. Якщо вам знадобляться, ви знаєте, кого (імено названо чи ні) вибрати.
Wrikken

56

Напевно, ви хочете побачити порівняння клієнтів PHP .

Коротка версія: Вони працюватимуть як у більшості випадків, так і в більшості випадків один із них буде чудово.

Щодо іншого питання: Так, ви повинні вміти це робити telnet 127.0.0.1 11211. Дуже мало брандмауерів заблокували б локальний хост від спілкування з самим собою. Якщо ви не в змозі підключитися, переконайтеся, що memcached дійсно працює шляхом виконання ps auxwww | grep memcached, що також покаже вам аргументи командного рядка, які використовуються для запуску memcached. Одним із аргументів повинен бути -p 11211чи інший номер порту. Про man memcachedсенс усіх можливих аргументів див.


2
Оновлення для додавання деяких етапів усунення несправностей.
Джессіка МакКіннон

Це дійсно чітка відповідь.
данідакар

@Nate, що таке еквівалент Windows ps auxwww | grep memcached?
Pacerier

1
@Pacerier: Подивіться на superuser.com/questions/415360 / ... . Провідник процесів - це найпростіший спосіб знайти запущений процес і переглянути його аргументи командного рядка.
Нейт

@Pacerier, що команда перевіряє, чи працює серверний процес, і бачить, як його викликали.
Ясен

27

Як свідчить посилання Nate, обидва працюють ідеально для простого використання. Однак memcached підтримує більше функцій, які дозволяють отримати максимальну ефективність з memcached. Бінарний протокол зменшує кількість даних, необхідних для надсилання між клієнтом і сервером. Мультисети та мультисети дозволяють отримувати / встановлювати декілька елементів одночасно. Якщо ви виявите, що вам потрібно більше oomph з memcache, memcached - це кращий модуль. Використання libmemcached дозволяє припустити, що сама бібліотека, можливо, більш оптимізована, ніж версія лише для PHP.

Memcached - це більш сучасний модуль порівняно з memcache, який вийшов лише 8 місяців тому. Якщо вам потрібно націлити на старішу версію PHP, тоді ви можете реально використовувати лише memcache.


Чудове пояснення!
Джон

21

Старший, баггір називається php-memcacheтому, що це здавалося найбільш підходящим ім'ям. Новіша, краща версія, незалежно розроблена людьми в Digg, замість цього була названа php-memcachedв інтересах неоднозначності.

Люди, які рекомендували б вибрати один за іншим, ґрунтуючись виключно на правильності імені, насправді не мають бізнесу, який пропонує технічну консультацію.


6

Нещодавно використовуючи php-memcache, мені доведеться вказати на php-memcached.

Ось декілька причин з моєї голови.

1) Не існує getErrorCode () або еквівалентного методу, тому якщо get () повертає FALSE, ви не матимете уявлення, чи це тому, що значення, збережене в memcache, є помилковим, чи виникла якась проблема.

2) Схоже, алгоритм хешування для послідовного хешування відрізняється від інших реалізацій, таких як багато клієнтських бібліотек, створених за допомогою libmemcached. Це означає, що якщо ви хочете використовувати один і той же кластер мемоша з декількома мовами, у вас, швидше за все, виникнуть проблеми, коли ви зберігатимете значення з клієнтом PHP, а інші клієнти не знайдуть його.


3

У обох є проблеми на сьогодні. PECL / memcache є старим і надійним, за кількома винятками, коли він застарів. PECL / memcached 1.x в кращому випадку є бета-версією. Деякі функції не працюють з цифровими клавішами, вони протікають підключенням при використанні постійних з'єднань. Деякі (усі?) Виправляються в GitHub і вийдуть у якийсь момент у 2.x, але не сьогодні. Для більш детального огляду див. Http://brian.moonspot.net/php-memcached-isissue


PECL / memcached 1.x тепер стабільний; PECL / memcache 2.x обмежений; PECL / memcache 3.x дуже нестабільний.
aredridel

2

Я працюю над книгою "Expert PHP та MySQL". Я написав майже те саме про відмінності. Що я рекомендував - це PECL / запам'ятовується. №1 - він обертається навколо повнофункціональної бібліотеки C №2 - вона нещодавно підтримується. №3 - більше функцій. Немає зневаги до PECL / memcache.


0

У мене виникли досить серйозні проблеми з Drupal 6 та php-pecl-memcached, коли час відгуку затримувався до 5 мс на виклик, і це призвело б до того, що один конкретний сайт створив би в 5 разів більше дзвінків, ніж до зміни на php-pecl-memcached . Зміна php-pecl-memcache вирішила всі проблеми; затримка та додаткові дзвінки.

Ця відповідь наведена виключно для того, щоб допомогти тим, хто використовує Drupal 6 та, можливо, Drupal 7.


-3
  • memcache - клієнт memcached (сервер)
  • libmemcached - це також клієнт, який потрібно заповнити

А для клієнтів є інші клієнти, див. Http://code.google.com/p/memcached/wiki/Clients

Вирізати та вставити з Інтернету:

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 "Розширення PHP для взаємодії з memcached через бібліотеку libmemcached" Це розширення використовує бібліотеку libmemcached для надання API для спілкування з мемованними серверами. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "розширення memcached" Memcached - демон кешування, призначений спеціально для динамічних веб-додатків для зменшення завантаження бази даних, зберігаючи об'єкти в пам'яті. Це розширення дає змогу працювати з вилученими за допомогою зручних OO та процедурних інтерфейсів.

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

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached

6
Ця довгодушна відповідь навіть не наближається до того, щоб зрозуміти речі для афіші. Плакат уже знає, що є кілька клієнтів. Перерахування їх та пропонування альтернативних імен не полегшує вибір правильного.
Martijn Heemels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.