Обмен Memcache - PullRequest
       6

Обмен Memcache

9 голосов
/ 13 февраля 2009

Можно ли совместно использовать один экземпляр Memcache между несколькими проектами.

Предположим, я помещаю один объект в memcache в одном проекте, могу ли я получить тот же объект из другого проекта.

Ответы [ 4 ]

14 голосов
/ 13 февраля 2009

Memcache - это просто хранилище памяти. Он может работать на нескольких машинах. Нет причины, по которой два совершенно разных процесса не могут общаться друг с другом через него.

Позвольте мне уточнить. Вы можете запустить memcache на одном или нескольких серверах. Вы можете настроить своих клиентов для общения с определенным набором экземпляров. Вы можете запустить два (или более) разных процесса memcache на одном хосте (прослушивая разные IP-адреса и / или порты), и они полностью независимы.

Если ваши два приложения общаются с одним и тем же экземпляром (ами), то нет никаких причин, по которым они не могут общаться.

Сложность возникает, если вы говорите с несколькими экземплярами и разбиваете свои данные (то есть разделяете их на разные экземпляры), тогда ваши клиенты должны знать, в какой экземпляр получать или помещать данные. Если вы используете одну и ту же клиентскую библиотеку (например, оба ваших клиента PHP5), то это не драма. Если они не совпадают, то вам нужно как-то решить эту проблему.

Другая проблема, если вы используете разные технологии, это то, что вам нужно подумать о формате обмена, так как пользовательская сериализация в PHP не будет так читаема в Java или C #. Типичные варианты: XML или даже JSON.

4 голосов
/ 13 февраля 2009

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

0 голосов
/ 04 октября 2012

Для каждого проекта я бы предоставил метод генерации ключей и проектов разделов по пространству имен. Поэтому для key = foo из проекта B он сохраняется / выбирается A.foo, а foo из проекта B называется B.foo и т. Д.

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

Лучше всего иметь несколько экземпляров memcache, запущенных на разных портах, это более чисто, ИМХО.

0 голосов
/ 04 августа 2012

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

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

...