Статьи

Java Memcached на Mac OS X

Введение

В этой статье я объясню, как вы можете:

  1. Установите и настройте Memcached в Mac OS X
  2. Используйте Memcached в вашем Java-приложении

Я не буду вдаваться в подробности о преимуществах использования распределенного кэша в ваших приложениях, но давайте по крайней мере предоставим некоторые варианты использования для приложений, работающих в контексте корпоративного портала, в моем случае eXo Platform — удивительно «т? И я покажу это в другом посте.

У нас есть много причин использовать кеш (распределенный или нет), в контексте корпоративного портала, давайте рассмотрим некоторые из этих причин:

  • Портал используется для агрегирования данных на одной странице. Эти данные могут поступать из разных источников: веб-сервисы, базы данных, ERP, … и доступ к данным в режиме реального времени может быть дорогостоящим. Поэтому будет очень интересно кешировать результат вызова, когда это возможно.
  • Если портал используется для объединения многих данных из многих источников, иногда необходимо перейти в другое приложение, чтобы продолжить какую-либо операцию. Распределенный и общий кэш может использоваться для управления некоторым контекстом между различными приложениями, работающими в разных процессах (JVM или даже технологии)

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

Обратите внимание, что API-интерфейс портлета (JSR-286) уже содержит механизм кэширования, который кэширует фрагмент HTML, и что платформа eXo также обеспечивает низкоуровневый кэш на основе JBoss Cache .

Установка и настройка

Установка Memcached из источников

Вы можете найти некоторую информацию об установке Memcached в Memcached Wiki . Следующие шаги — это шаги, которые я использовал в своей среде.

Насколько я знаю, Memached недоступен в качестве пакета для Mac OS X. Я все еще на Snow Leopard (10.6.8), и я установил XCode и все инструменты разработки. Я пользуюсь статьей «Установка memcached 1.4.1 в Mac OS X 10.6 Snow Leopard» с сайта wincent.com . По причине простоты я продублировал содержимое и обновил до последних выпусков.

1. Создайте рабочий каталог:

1
2
$ mkdir memcachedbuild
$ cd memcachebuild

2. Установите libevent , обязательный для memcached.

1
2
3
4
5
6
7
$ curl -O http://www.monkey.org/~provos/libevent-1.4.14-stable.tar.gz
$ tar xzvf libevent-1.4.14-stable.tar.gz
$ cd libevent-1.4.14-stable
$ ./configure
$ make
$ make verify
$ sudo make install

3. Установите memcached

Вернитесь в каталог установки ( memcachedbuild )

1
2
3
4
5
6
7
$ curl -O http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
$ tar xzvf memcached-1.4.10.tar.gz
$ cd memcached-1.4.10
$ ./configure
$ make
$ make test
$ sudo make install

Теперь вы готовы использовать memcached, который доступен в / usr / local / bin / memcached

Это позволяет избежать перехода на предустановленный memcached, расположенный в / usr / bin, если вы хотите заменить его вместо собственной установки, просто запустите команду configure со следующим параметром: ./configure –prefix = / usr

Запуск и тестирование Memcached

Запустите сервер memcached, используя следующую командную строку:

1
$ /usr/local/bin/memcached -d -p 11211

Эта команда запускает сервер memcached от имени демона (параметр -d) на TCP-порту 11211 (это значение по умолчанию). Вы можете узнать больше о команде memcached, используя man memcached.

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

01
02
03
04
05
06
07
08
09
10
11
$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to tgrall-server.
Escape character is '^]'.
set KEY 0 600 16
This is my value
STORED
get KEY
VALUE KEY 0 16
This is my value
END

Команда set позволяет вам поместить новое значение в кеш, используя следующий синтаксис:

1
2
3
set <key> <flags> <expiration_time> <number_of_bytes> [noreply]
 
<value>
  • ключ: ключ, используемый для хранения данных в кеше
  • флаги: 32-битное целое число без знака, которое хранится в memcached с данными
  • expiration_time: время истечения в секундах, если вы установите 0, это означает отсутствие задержки
  • number_if_bytes: количество байтов в блоке данных
  • noreply: возможность указать серверу не возвращать никакого значения
  • значение: значение, которое нужно сохранить и связать с ключом.

Это краткое представление документации, расположенной в вашей исходной директории /memcachedbuild/memcached-1.4.10/doc/protocol.txt.

Команда get позволяет получить доступ к значению, связанному с ключом.

Вы можете проверить версию memcahed, которую вы используете, вызвав команду stats в вашем сеансе telnet.

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

Простое Java-приложение с Memcached

Самый простой способ использовать memcached из ваших Java-приложений — это использовать клиентскую библиотеку. Вы можете найти много клиентских библиотек . В этом примере я использую spymemcached, разработанный людьми из Couchbase .

1. Добавление SpyMemcached в ваш проект Maven

Добавьте к вам хранилище pom.xml (или вы устанавливаете .xml)

1
2
3
4
5
6
<repository>
    <id>spy</id>
    <name>Spy Repository</name>
    <layout>default</layout>
</repository>

тогда зависимость от вашего pom.xml

1
2
3
4
5
<dependency>
    <groupid>spy</groupid>
    <artifactid>spymemcached</artifactid>
    <version>2.7.3</version>
</dependency>

2. Используйте клиент SpyMemcache в вашем приложении

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.grallandco.blog;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Console;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.spy.memcached.AddrUtil;
import net.spy.memcached.MemcachedClient;
 
public class Test {
 
    public static void main(String[] args) {
       try {
            
           System.out.print("Enter the new key : ");
           BufferedReader reader = new BufferedReader( new InputStreamReader(System.in));
           String key = null;
           key = reader.readLine();
            
           System.out.print("Enter the new value : ");
           String value = null;
           value = reader.readLine();
            
            MemcachedClient cache = new MemcachedClient(AddrUtil.getAddresses("127.0.0.1:11211"));
             
            // read the object from memory
            System.out.println("Get Object before set :"+ cache.get(key)  );
 
            // set a new object           
            cache.set(key, 0, value );
 
            System.out.println("Get Object after set :"+ cache.get(key)  );
             
 
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(0);
        }
 
        
        System.exit(0);
        
    }
}

Таким образом, при выполнении приложения вы увидите что-то вроде:

1
2
3
4
5
6
Enter the new key : CITY
Enter the new value : Paris, France
2011-11-16 15:22:09.928 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2011-11-16 15:22:09.932 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@5b40c281
Get Object before set :null
Get Object after set :Paris, France

Вы также можете получить доступ к объекту из сеанса Telnet:

1
2
3
4
get CITY
VALUE CITY 0 13
Paris, France
END

Вы можете использовать любой класс Java в своем приложении, единственное, что нужно сделать — сделать этот класс сериализуемым.

Это первая статья о memcached и Java, в настоящее время я работаю над небольшим примером интеграции вызовов Web-сервисов, портлетов и memcached.

Ссылка: Установка Memcached на Mac OS X и использование его на Java от нашего партнера по JCG Тугдуала Граля в блоге Tug’s Blog .