В этой статье я объясню, как вы можете:
- Установите и настройте 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 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 .