在本文中,我將解釋如何:
- 在Mac OS X上安裝和配置Memcached
- 在Java應用程序中使用Memcached
我不會過多地介紹在您的應用程序中使用分布式緩存的好處,但是至少讓我們提供一些在企業門戶(在我的情況下為eXo平臺)中運行的應用程序的使用案例– 令人驚訝的是不是嗎 我將在另一篇文章中展示。
在企業門戶的上下文中,我們有很多使用緩存(無論是否分布式)的原因,讓我們看一下其中的一些原因:
- 門戶用于在單個頁面中聚合數據。 這些數據可能來自不同的來源:Web服務,數據庫,ERP等,而實時訪問數據可能會非常昂貴。 因此,盡可能地緩存調用結果將非常有趣。
- 如果使用門戶來聚合來自許多來源的許多數據,則有時需要跳入另一個應用程序以繼續某些操作。 分布式共享緩存可用于管理在不同進程(JVM甚至技術)中運行的不同應用程序之間的某些上下文
這是兩個示例,其中共享緩存可能對基于門戶的應用程序很有趣,我們可以找到許多其他原因。
請注意,Portlet API(JSR-286)已經包含用于緩存HTML片段的緩存機制,并且eXo Platform還基于JBoss Cache提供了低級 緩存 。
安裝與配置
從源安裝Memcached
您可以在Memcached Wiki上找到有關Memcached安裝的一些信息。 以下步驟是我在環境中使用的步驟。
據我所知,Memached不能作為Mac OS X的軟件包使用。我仍然在Snow Leopard(10.6.8)上,并且已經安裝了XCode和所有開發工具。 我使用了wincent.com上的文章“在Mac OS X 10.6 Snow Leopard上安裝memcached 1.4.1”。 為簡單起見,我重復了內容并更新為最新版本。
1.創建一個工作目錄:
$ mkdir memcachedbuild
$ cd memcachebuild
2.安裝對memcached必需的libevent
$ 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 )
$ 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
現在,您可以使用/ usr / local / bin / memcached中可用的memcached
這樣可以避免更改為/ usr / bin中的預安裝memcached,如果要替換它而不是自己安裝,只需運行帶有以下參數的configure命令:./configure –prefix = / usr
啟動和測試Memcached
使用以下命令行啟動memcached服務器:
$ /usr/local/bin/memcached -d -p 11211
此命令在TCP端口11211上以守護程序(-d參數)的形式啟動memcached服務器(這是默認值)。 您可以使用man memcached找到有關memcached命令的更多信息。
可以使用telnet連接來連接和測試服務器。 建立連接后,您可以在緩存中設置并獲取對象,請看以下段落。
$ 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命令允許您使用以下語法在緩存中放置新值:
set <key> <flags> <expiration_time> <number_of_bytes> [noreply]<value>
- key:用于將數據存儲在緩存中的鍵
- flags:32位無符號整數,與數據一起進行memcached存儲
- expiration_time:以秒為單位的到期時間,如果您輸入0,則表示沒有延遲
- number_if_bytes:數據塊中的字節數
- noreply:告訴服務器不返回任何值的選項
- value:要存儲并關聯到鍵的值。
這是位于源目錄/memcachedbuild/memcached-1.4.10/doc/protocol.txt中的文檔的簡短視圖。
get命令允許您訪問與鍵關聯的值。
您可以通過在telnet會話中調用stats命令來檢查正在運行的memcahed的版本。
您的內存緩存服務器已啟動并正在運行,現在您可以開始在應用程序中使用它。
具有Memcached的簡單Java應用程序
從Java應用程序使用memcached的最簡單方法是使用客戶端庫。 您可以找到許多客戶端庫 。 在此示例中,我使用的是由Couchbase的人員開發的spymemcached 。
1.將SpyMemcached添加到您的Maven項目
將存儲庫添加到您的pom.xml(或您的setting.xml)中
<repository><id>spy</id><name>Spy Repository</name><layout>default</layout><url>http://files.couchbase.com/maven2/</url>
</repository>
然后對您的pom.xml的依賴
<dependency><groupid>spy</groupid><artifactid>spymemcached</artifactid><version>2.7.3</version>
</dependency>
2.在您的應用程序中使用SpyMemcache客戶端
以下代碼是一個簡單的Java類,允許您輸入鍵和值并將其設置在緩存中。
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 memorySystem.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);}
}
因此,在執行應用程序時,您將看到類似以下內容:
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會話訪問對象:
get CITY
VALUE CITY 0 13
Paris, France
END
您可以在應用程序中使用任何Java類,唯一要做的就是使該類可序列化。
這是有關memcached和Java的第一篇文章,目前我正在研究一個集成Web服務調用,Portlet和memcached的小示例。
參考: 在我們的JCG合作伙伴 Tugdual Grall的Tug's Blog博客上,在Mac OS X上安裝Memcached并在Java中使用它 。
翻譯自: https://www.javacodegeeks.com/2012/05/java-memcached-on-mac-os-x.html