Коли я повинен використовувати Memcache замість Memcached?


321

Здається, що в PHP є дві бібліотеки, що склалися з ім'ям memcache та memcached . У чому різниця і як ви знаєте, який саме використовувати? Чи одна застаріла? Здається, що memcached пропонує більше методів, тому я б припустив, що це означає, що він мав найбільшу розробку, але, здається, також потрібні зовнішні бібліотеки C / C ++, тому я не впевнений, чи зможу я його встановити.

Здається, що memcache вже довший, не потребує додаткових бібліотек, а заздалегідь склав двійкові файли для навіть windows! Я думаю, що це був би кращий вибір на даний момент. Однак, будучи новим у memcached (сервері), я не впевнений, чи є якісь надважливі функції у memcached (php), які роблять це варто додаткових проблем.


1
У ZendCon є хороший епізод, який порівнює обидва. Сеанси ZendCon Епізод 040: Memcached: кращий інтерфейс Memcache
Джон Магнолія

дублікат serverfault.com/questions/63383/memcache-vs-memcached всього за кілька днів, але це отримало більше переглядів і голосів :)
Стефано

Відповіді:


249

Нещодавно випущена клієнтська бібліотека була стабільною. Він використовується digg (розроблений для digg Андрієм Змієвським, тепер вже не Digg) і реалізує набагато більше протоколу запам’ятовування, ніж старший клієнт memcache. Найважливіші особливості, які зберігаються в пам’яті:

  1. Cas жетони . Це значно полегшило моє життя і є легкою системою профілактики несвіжих даних. Щоразу, коли витягуєте щось із кеша, ви можете отримувати з ним маркер cas (подвійне число). Ви можете використовувати цей маркер, щоб зберегти оновлений об’єкт. Якщо ніхто більше не оновлював значення під час запуску потоку, своп буде успішним. В іншому випадку був створений новіший маркер cas, і ви змушені перезавантажити дані та зберегти їх знову за допомогою нового маркера.
  2. Прочитати зворотні дзвінки - це найкраще, оскільки нарізаний хліб. Це значно спростило мій код.
  3. getDelayed () - це приємна функція, яка може скоротити час, коли ваш сценарій повинен чекати, коли результати повернуться з сервера.
  4. Хоча пам'ятний сервер повинен бути дуже стабільним, він не найшвидший. Ви можете використовувати бінарний протокол замість ASCII з новим клієнтом.
  5. Кожен раз, коли ви зберігаєте складні дані в memcached, клієнт використовував завжди серіалізацію значення (що повільно), але тепер із memcached client у вас є можливість використовувати igbinary . Поки що у мене не було можливості перевірити, наскільки це може бути підвищення продуктивності.

Все це було достатньо для мене, щоб перейти на найновішого клієнта, і я можу сказати вам, що це працює як шарм. Існує така зовнішня залежність від бібліотеки, що керується libmemcached , але все-таки вдалося встановити її на Ubuntu та Mac OSX, тому проблем поки що немає.

Якщо ви вирішили оновити до нової бібліотеки, я пропоную вам оновити до останньої версії сервера, а також вона має деякі приємні функції. Для його компіляції вам потрібно буде встановити libevent , але для Ubuntu це не склало великих проблем.

Поки що я не бачив жодної системи, яка б забрала нового клієнта, що склався (хоча я їх не відслідковую), але я припускаю, що Zend незабаром вийде на борт.

ОНОВЛЕННЯ

Zend Framework 2 має адаптер для Memcached, який можна знайти тут


1
Відмінна відповідь; Крім того, зовнішня залежність від libmemcached насправді є плюсом, в цьому випадку, оскільки це один з найбільш активно розвинених клієнтів.
Марк Боллінгер

Домовились. Зовнішня залежність, що захована на ліб, не повинна вважатися проблемою, такою ж, як звільниця.
Miha Hribar

1
Ця річ із Cas Tokens звучить як найбільший плюс. Насправді, переглядаючи ці функції, майже здається, що запам'ятоване спрямовується більше до керованого власника даних, як БД, і менш схоже на тимчасовий кеш.
Xeoncross

Якщо ви шукаєте, у вас вже є memcachedb ( memcachedb.org ), який насправді є лише БД Berkley, який говорить про протокол memcached.
Miha Hribar

8
ця відповідь навіть не каже різницю між memcache та memcached ?! є memcache лише старішою версією memcached?
Даніель В.

10

При використанні Windows порівняння скорочується: memcacheвидається, що це єдиний клієнт.


Не могли ви завжди додати memcachedрозширення в себе?
Pacerier

1
Здається, це насправді не так. commaster.net/content/installing-memcached-windows
Джо Леонард

@JoeLeonard зі сторінки, на яку ви посилаєтесь: "Для інтерфейсу memcachedв PHP потрібно встановити memcacheрозширення для PHP"
rymo

8

Це 2013. Забудьте про коментарі 2009 року. Так само, якщо у вас є серйозні навантаження на трафік, навіть не замислюйтесь, як зробити з мембраною на основі Windows. У роботі з дуже великими масштабами (500+ веб-серверів на передньому кінці) та 20+ серверами баз даних та реплікантами (mysql & mssql суміш), ферма згаданих серверів (12 серверів у групі) підтримує декілька великих обсягів OLTP-програм, відповідаючи на 25 К ~ 40K mc-> отримуйте дзвінки за секунду. Ці дзвінки - це ті, що НЕ повинні мати доступ до бази даних.

IMHO, використання цього шаблону забезпечувало СЕРЕДНІ $$$, $$$ економію на CAPEX для нових серверів та ліцензій БД, а також контрактів на підтримку великих комерційних дизайнів.


48
Як це відповідає на питання про відмінності між цими двома реалізаціями протоколу memcache у php?
Marki555

9
Це має бути коментар.
Ілля Лінн

7

Memcached - це новіший API, він також забезпечує memcached як постачальник сесій, що може бути чудово, якщо у вас є ферма сервера.

Після того як версія все ще дійсно низька 0,2, але я використовував і те, і не зіткнувся з основною проблемою, тому я б пішов на запам’ятовування, оскільки це нова.


1
Обидва насправді працюють як обробники сесій, хоча я ніколи не хотів би їх використовувати для цього. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross

добре зловити моє погано, так, це дуже корисно лише на великому сервері, коли io стає дійсно важливим, плюс memcache не підтверджує, що він не випаде з якогось об'єкта, щоб отримати пам'ять, так важко знати, як масштабувати речі.
RageZ

1
Версія 0.2 з тих пір перевершила стабільну версію 1.0.0.
Miha Hribar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.