2009-02-13 2 views
8

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

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

ответ

14

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

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

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

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

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

+0

Я полностью неправильно понял вопрос, спасибо за указание на это :) –

4

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

0

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

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

0

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

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

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

Смежные вопросы