2013-08-12 2 views
0

Я учусь, как кэшировать объекты с использованием Memcached с spymemcached клиентом от spymemcached examplesКак кэшировать Memcached соединения с помощью Java spymemcached клиента

MemcachedClient c=new MemcachedClient(new InetSocketAddress("hostname", portNum));  
// Store a value (async) for one hour 
c.set("someKey", 3600, someObject); 
// Retrieve a value (synchronously). 
Object myObject=c.get("someKey"); 

Я заметил, что каждый раз, когда я хочу, чтобы кэшировать или извлечение объекта Я создаю новый клиент memcached, который, как предполагается, представляет собой новое соединение, и что memcached не имеет механизма объединения пулов, поэтому пользователям рекомендуется кэшировать соединения для уменьшения накладных расходов для повторного подключения от этого вопроса opening closing and reusing connections.

Мой вопрос в том, как кешировать это соединение? Может кто-нибудь, пожалуйста, дайте мне пример, с которого я могу начать. Если вам интересно, что я пробовал, я попытался установить соединение в memcached, но потом понял, что мне нужно создать соединение, чтобы его получить. :)

Заранее спасибо.

ответ

0

я сделал немного больше исследований и наткнулся на this question Тогда я придумал мое решение, как,

первым создал contextlistener

public class ContextListener implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
     Memcached.createClient(); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) { 
    } 

} 

затем я добавил слушателя к discriptor развертывания путем добавления эти строки в Интернете.XML

<listener> 
    <description>Used with memcached to initialize connection</description> 
    <listener-class>com.qualebs.managers.ContextListener</listener-class> 
</listener> 

Я создал класс Memcached и добавил эти методы

static void createClient() { 
     try { 
      client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); 
     } catch (IOException ex) { 
      Logger.getLogger(Memcached.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); 
     } 
    } 

    static MemcachedClient getClient() throws IOException { 
     return client; 
    } 

Теперь в любом месте, мне нужно использовать Memcached соединение просто позвоните Memcached.getClient() Я надеюсь, что поможет кому-то там с тот же вопрос.

0

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

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

+0

Но это на самом деле не отвечает на мой вопрос. 'Это просто означает, что вы должны использовать повторное использование подключений, которые вы открываете, а не открывать соединение для каждого запроса. Не имеет смысла хранить экземпляр подключения в memcached.' вы просто перефразировали его. – qualebs

2

Я заметил, что каждый раз, когда я хочу, чтобы кэшировать или извлечения объекта я создать новый Memcached клиент, который я, предполагая новое соединение

Не делайте этого; spymemcache использует одно соединение для ВСЕХ операций ввода-вывода в memcache и из него; все это делается асинхронно; от spymemcache документов ...

Каждого экземпляр MemcachedClient устанавливает и поддерживает одно подключения к каждому серверу в кластере.

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

MemcachedClient memClient = new MemcachedClient(new InetSocketAddress(host, port)); 

memClient для ввода/вывода с memcache; нет необходимости создавать новый экземпляр MemcachedClient каждый раз; сделанный. Ссылка, которую вы предоставили, отвечает на все ваши вопросы.

Каково ваше развертывание? веб-приложение или автономное?

+0

Я развертываю в веб-приложении. Я должен создать соединение в методе init() моего сервиса, а затем передать его другим классам, так ли это? – qualebs

+0

Я решил проблему сейчас, и я отправляю ответ. Thanx для указания меня в правильном направлении. – qualebs

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

  • Нет связанных вопросов^_^