Как связать сервер MemCached вместе? - PullRequest
8 голосов
/ 09 декабря 2008

Я изучаю использование MemCached для веб-приложения, которое я разрабатываю, и после изучения MemCached в течение последних нескольких дней я столкнулся с вопросом, на который я не смог найти ответ.

Как связать сервер Memcached вместе или как вы реплицируете данные между сервером MemCached?

Дополнительно: Эта функция контролируется серверами или клиентами и как?

Ответы [ 6 ]

7 голосов
/ 09 декабря 2008

при установке нескольких серверов клиентские библиотеки используют первый хэш, чтобы выбрать один, где хранить каждую пару ключ / данные. это означает, что репликации нет, а также что каждый клиент должен использовать один и тот же набор серверов.

Плюсы:

  • почти нулевые накладные расходы, линейный рост памяти и пропускной способности.
  • код сервера хранится просто и надежно.

минусы:

  • любое изменение в наборе серверов (один отключается или вы добавляете новый) внезапно делает недействительным (почти) весь кеш.
  • вы должны обязательно использовать один и тот же алгоритм на каждом клиенте.

если у вас есть контроль над кодом клиента, вы можете просто хранить каждую пару ключ / данные дважды на двух серверах. Обязательно выполняйте поиск в тех же местах при чтении с другого клиента.

5 голосов
/ 27 февраля 2009

Я использовал BeITMemcached , и в этом вы создаете экземпляр MemcacheClient и устанавливаете серверы, которые хотите использовать, просто как строки.

В этот момент клиент сам определяет, на каком из серверов он может разместить различные элементы. Вы никогда не знаете, какой предмет будет в.

Проверьте здесь, чтобы увидеть, как серверы обрабатывают аварийное переключение .

Самое простое - иметь механизм повторного заполнения. В моем случае я храню несколько сотен объектов в memcache, которые выходят из базы данных. Я могу просто позвонить репопулировать и положить их обратно туда. Всякий раз, когда я добавляю, обновляю или удаляю их в базу данных, я делаю те же самые вызовы в memcache.

2 голосов
/ 02 марта 2009

http://repcached.lab.klab.org/

Кроме того, клиент memcache PHP PECL может реплицировать данные на несколько серверов, см. Memcache.redundancy.

1 голос
/ 27 февраля 2009

Звучит так, будто вы хотите иметь кеши, которые могут справиться с перезагрузкой машины и т. Д., Если это так ...

Во многих случаях (при условии, что вы не пишете в Facebook) RDMS достаточно быстр для кэширования. Просто создайте таблицу, в которой есть ключ и столбец BLOB-объектов. Если на RDBS-сервере достаточно оперативной памяти, все данные будут в ОЗУ и просто сохранены на диск, чтобы можно было восстановить данные.

Помните, что это может быть отдельный сервер (ы) от вашего основного сервера базы данных.

Если вы хотите получить больше фантазии и используете высококачественную RDMS, вы можете настроить уведомления об изменениях в запросах, которые используются для построения «кэшированных данных», которые удаляют устаревшие строки из кеш.

Кто-то может настроить триггеры для очистки недопустимых строк из кэша, однако это может быть очень сложно очень быстро.

0 голосов
/ 15 июня 2012

Вы должны серьезно рассмотреть вопрос CouchBase . Он использует протокол memcached, обеспечивает почти такую ​​же скорость и обеспечивает автоматическую репликацию, которую вы ищете. Он также сохраняется на диске, поэтому ваш кэш никогда не будет холодным.

0 голосов
/ 15 июня 2012

Memcached не предоставляет свойства репликации. Для этого вам нужно добавить сервер в список клиентских серверов memcached, а затем нажать на БД для хранения данных на этом конкретном сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...