2012-06-20 2 views
1

Вопрос: - Нужно ли java-клиенту беспокоиться о нескольких серверах?Неужели клиент должен беспокоиться о нескольких серверах memcache?

Смысл: - Я дал два сервера в memcached-клиенте, но когда я устанавливаю или получаю ключ из кеша, мне нужно предоставить любую информацию, связанную с сервером, или сам memcache позаботится об этом?

Мои знания: - Memcache сам позаботится из-за последовательного хеширования.

но ли spymemcached 2.8.0 обеспечивает последовательное хеширование ???

+0

Мы говорим о Memcache или Memcached? –

+0

второй ... memcache ** d ** –

ответ

4

Серверы Memcached: Объединение серверов. Это означает, что вы определяете пул (список) серверов и когда клиент Java пытается записать его в пул.

Задача клиента - решить, какой сервер из пула получит и сохранит значение и как он получит значение из этого пула.

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

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

Один из простейших - modula. Этот алгоритм распределяет ключи в зависимости от количества серверов memcached в пуле. Если количество серверов в пуле изменится, клиент не сможет найти сохраненные данные, будут отсутствовать промахи в кеше. В таком случае лучше использовать consistent hashing.

Популярные пользователи java memcached spymemached и xmemcached поддерживают последовательное хеширование.

В некоторых случаях использования вместо непосредственного использования клиента memcached кеширование может быть добавлено в приложение весны через AOP (перехватчики) с использованием simple-spring-memcached или Spring 3.1 Cache Abstraction. Spring Cache в настоящее время не поддерживает memcached, но simple-spring-memcached предоставляет такие integration в сборке моментальных снимков и предстоящей версии 3.0.0.

+1

Это означает, что мы просто установили ключ и вернули его, нам не нужно беспокоиться о серверах, на которых он был сохранен ... m i right ?? –

+0

Точно! Когда вы создаете экземпляр MemcachedClient, клиентский объект предназначен для одного пула и управляет связью со всеми серверами из пула. Возможно, вам понадобится/нужно использовать несколько пулов, и в этом случае вам понадобятся отдельные экземпляры объекта MemcachedClient. –

+0

Спасибо Mihai .... он очистил много сомнений ... большое спасибо ... –

0

Сервер MemCached сможет самостоятельно хранить и извлекать ключ/значение. При хранении с использованием хеша генерировать ключ и хранить его. Выбрав еще раз хэш данной клавиши и найдите, на каком сервере он был сохранен, а затем выберите его, это займет некоторое время.

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

Создайте один HashMap и сохраните ключ с адресом сервера в качестве значения. Теперь, в следующий раз, когда один и тот же ключ должен получить, а затем вместо поиска, вы получите адрес сервера непосредственно из HashMap, и вам нужно только получить значение. Следовательно, вы можете сохранить время поиска сервера MemCahce.

Надеюсь, вы понимаете, что я имею в виду.