一.安裝memcached
1.windows下安裝memcached
需要到一個網站下載memcached的for win 32版本.在memcached的官方網站我是找不到的.我看了下,提供win版下載的是一個個人網站,老外的.應該是他自己用src編譯的.
下載到只有幾十K大小(我也嚇了跳,還以爲是病毒).安裝後確實能用.我嘗試在本帖提供附件下載.
下載後輸入命令安裝命令:
c:\memcached\memcached.exe -d install
然後再輸入如下命令把其作爲win service常駐啓動:
c:\memcached\memcached.exe -d start
其他詳細的並沒做了,因爲部署在win上只是暫時開發測試用的,最終會部署在linux版本上.
2.linux下安裝memcached
1.下載包
1.1.到http://memcached.org/下載linux下的memcached的安裝包.
1.2.到http://libevent.org/ 下載安裝memcached前比需要的包libevent-2.0.15 我安裝的是這個版本.
2.安裝libevent-2.0.15
# tar zxvf libevent-2.0.5-beta.tar.gz
# cd libevent-2.0.5
# ./configure –prefix=/usr
# make
# make install如果中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增加相應的庫或者路徑。(網上照搬.中間我只是出現過沒有GCC的情況)
3.安裝memcached
tar zxvf memcached-1.4.2.tar.gzcd memcached-1.4.2
./configure --with-libevent=/usr
make
make install
如果中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增加相應的庫或者路徑。
安裝完成後會把memcached放到 /usr/local/bin/memcached ,4.測試是否成功安裝memcached:
# ls -al /usr/local/bin/mem*成功的話,會輸出一些相關信息。
5.啓動memcached
網上有一個命令很長的方法,可以我啓動後進程是出現了,但就是不監聽11211的端口.繼續尋找終於找到一個可行的了.2個命令如下:
5.1我使用的,可行的命令
memcached -d -m 128 -l localhost -p 11211 -u root (其中Localhost是指監聽本機器的端口.)
5.2網上很多,但我使用卻失敗的命令
/usr/local/bin/memcached -d -m 10 -u root -l localhost -p 12000 -c 256 -P /tmp/memcached.pid
6.給出memcached啓動命令參數詳解.
-d選項是啓動一個守護進程,
-m是分配給Memcache使用的內存數量,單位是MB,我這裏是10MB,
-u是運行Memcache的用戶,我這裏是root,
-l是監聽的服務器IP地址,如果有多個地址的話,我這裏指定了服務器的IP地址192.168.0.200,
-p是設置Memcache監聽的端口,我這裏設置了12000,最好是1024以上的端口,
-c選項是最大運行的併發連接數,默認是1024,我這裏設置了256,按照你服務器的負載量來設定,
-P是設置保存Memcache的pid文件,我這裏是保存在 /tmp/memcached.pid,
-p 使用的TCP端口。默認爲11211
-m 最大內存大小。默認爲64M
-vv 用very vrebose模式啓動,調試信息和錯誤輸出到控制檯
-d 作爲daemon在後臺啓動
如果要結束Memcache進程,執行:
# kill `cat /tmp/memcached.pid`
或是 通過ps -ef | grep memcached 找到pid ,然後kill
也可以啓動多個守護進程,不過端口不能重複。
# ps -ef | grep memcached
root 28914 1 0 07:27 ? 00:00:00 memcached -d -m 128 -l localhost -p 11211 -u root (啓動ok)
6.測試memcached
#telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
二.調用的包
可從http://code.google.com/p/memcached-session-manager/downloads/list下載所需要的包.
需要注意的是,你只能從該網站下載到 memcached-session-manager-1.5.1.jar / memcached-session-manager-tc6-1.5.1.jar / msm-javolution-serializer-1.5.1.jar
這3個包,還有2個包分別是 : memcached-2.5.jar / javolution-5.5.1.jar這2個包,需要自己另外下載哦.
都是放到tomcat/lib下.
三.環境
本人使用的是tomcat6 + memcached-session-manager,首先是在windows下測試的.以後將部署在Linux環境下
四.TOMCAT配置
網上有好多的版本,甚至在memcached-session-manager的wiki中都是在tomcat的conf/context.xml下配置.
但本人是在server.xml中配置到需要session共享的host中.配置見如下:
- <Engine name="Catalina" defaultHost="localhost">
- <Host name="localhost"
- appBase="webapps"
- unpackWARs="true"
- autoDeploy="true"
- xmlValidation="false"
- xmlNamespaceAware="false">
- <Alias>localhost</Alias>
- <Context reloadable="false" path="" docBase="/test/" workDir="/test/work" >
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="n1:localhost:11211"
- requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;
- sessionBackupAsync="false"
- sessionBackupTimeout="100"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
- copyCollectionsForSerialization="false"
- />
- </Context>
- </Host>
- </Engine>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Alias>localhost</Alias>
<Context reloadable="false" path="" docBase="/test/" workDir="/test/work" >
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"
/>
</Context>
</Host>
</Engine>
五.測試代碼
- <%
- String tmp = (String)session.getAttribute("tmp");
- if(tmp == null || tmp == ""){
- session.setAttribute("tmp","i am created in tomcat 2 . my id is : "+session.getId());
- tmp = (String)session.getAttribute("tmp");
- out.println(" null now to created value !");
- out.println("<br/>");
- out.println(tmp);
- System.out.println(tmp);
- }else{
- out.println(tmp);
- System.out.println(tmp);
- }
- %>
<%
String tmp = (String)session.getAttribute("tmp");
if(tmp == null || tmp == ""){
session.setAttribute("tmp","i am created in tomcat 2 . my id is : "+session.getId());
tmp = (String)session.getAttribute("tmp");
out.println(" null now to created value !");
out.println("<br/>");
out.println(tmp);
System.out.println(tmp);
}else{
out.println(tmp);
System.out.println(tmp);
}
%>
六.測試結果
無論你從哪個tomcat瀏覽該jsp的打印信息(只要不關瀏覽器或者瀏覽器的標籤),獲得的session id都是一樣的,證明是同一個session,並且共享了.