В этой статье я объясню, как вы можете:
- Установите и настройте Memcached в Mac OS X
- Используйте 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 11211Trying 127.0.0.1...Connected to tgrall-server.Escape character is '^]'.set KEY 0 600 16This is my valueSTOREDget KEYVALUE KEY 0 16This is my valueEND |
Команда 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 : CITYEnter the new value : Paris, France2011-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 queue2011-11-16 15:22:09.932 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@5b40c281Get Object before set :nullGet Object after set :Paris, France |
Вы также можете получить доступ к объекту из сеанса Telnet:
|
1
2
3
4
|
get CITYVALUE CITY 0 13Paris, FranceEND |
Вы можете использовать любой класс Java в своем приложении, единственное, что нужно сделать — сделать этот класс сериализуемым.
Это первая статья о memcached и Java, в настоящее время я работаю над небольшим примером интеграции вызовов Web-сервисов, портлетов и memcached.
Ссылка: Установка Memcached на Mac OS X и использование его на Java от нашего партнера по JCG Тугдуала Граля в блоге Tug’s Blog .