клиент memcached: открытие, закрытие и повторное использование соединений - PullRequest
10 голосов
/ 30 декабря 2011

Я тестировал клиентов spymemcached и xmemcached.Я пытался найти ответы в документации по проектам, но она очень плохая.

Мои вопросы касаются открытия, закрытия и повторного использования соединений.Я нашел это в одном документе:

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

Spymemcached не предоставляет пул соединений, поэтому каждый раз, когда я создаю экземпляр MemcachedClient, я создаю новое соединение, верно?Тогда когда мне следует закрыть соединение? Должен ли я предоставлять один и тот же экземпляр всем потокам в моем приложении или каждый раз создавать новый?

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

1 Ответ

8 голосов
/ 31 декабря 2011

Spymemcached не предоставляет пул соединений, поэтому каждый раз, когда я создаю MemcachedClient экземпляр, я создаю новое подключение, верно?

Да, каждый раз, когда вы создаете новый объект MemcachedClient, вы создаете новое соединение. Каждое соединение выглядит асинхронным для приложения, поэтому даже одного подключения, вероятно, будет достаточно для вашего приложения. Однако некоторые люди создают пул подключений MemcachedClients.

Тогда когда я должен закрыть соединение?

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

Должен ли я предоставлять один и тот же экземпляр всем потокам в моем приложении или каждый раз создавать новый?

Использовать одно и то же соединение с несколькими потоками. Создание нового соединения для каждого вызова приведет к значительному падению производительности из-за накладных расходов при создании соединения TCP.

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

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

...