一,Windows下的Memcache安裝:
1. 下載memcache的windows穩定版,解壓放某個盤下面,好比在c:\memcached
2. 在終端(也即cmd命令界面)下輸入 'c:\memcached\memcached.exe -d install' 安裝
3. 再輸入: 'c:\memcached\memcached.exe -d start' 啓動。NOTE:
之後memcached將做爲windows的一個服務每次開機時自動啓動。這樣服務器端已經安裝完畢了。 php
magent -u root(啓動用戶uid) -n 51200(最大鏈接數) -l 127.0.0.1(ip地址) -p 12000(監聽端口) -s 127.0.0.1:11211(memcached的ip) -s 127.0.0.1:11212(memcached的ip) -b 127.0.0.1:11213(備份memcached的ip) java
magent -u root -n 5120 -l 127.0.0.1 -p 12000 -s
127.0.0.1:11211 -s 127.0.0.1:11212 -b
127.0.0.1:11213 linux
-p 監聽的端口
-l 鏈接的IP地址, 默認是本機
-d start 啓動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在運行的memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c 最大同時鏈接數,默認是1024
-f 塊大小增加因子,默認是1.25
-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助 web
telnet
127.0.0.1 11211 stats
查詢狀態 算法
quit 退出telnet二,memcache服務器安全: 編程
>用內網ip的方式提供web應用服務器調用,不容許直接經過外網調用,如將memcache服務器放在192.168.1.55的服務器上
2>修改端口,如改成11200
3>分配內存,如分配1024M(1G內存)
方法以下:
1>開始>運行:regedit(回車)
2>在註冊表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached
Server
3>默認的ImagePath鍵的值是:"c:\memcached\memcached.exe" -d runservice,改成:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(肯定,關閉註冊表)
4>個人電腦(右鍵)>管理>服務 找到memcache的服務,從新啓動一次便可生效。
可使用php寫的MemAdmin 來監控memcahce運行狀態 windows
三:memcached機制 安全
memcached能接受的key的最大長度是多少? ruby
key 的最大長度是250個字符。須要注意的是,250是memcached服務器端內部的限制,若是您使用的客戶端支持」key的前綴」或相似特性,那麼 key(前綴+原始key)的最大長度是能夠超過250個字符的。咱們推薦使用使用較短的key,由於能夠節省內存和帶寬。 性能優化
這些狀態的說明以下
pid |
memcache服務器的進程ID |
uptime |
服務器已經運行的秒數 |
time |
服務器當前的unix時間戳 |
version |
memcache版本 |
pointer_size |
當前操做系統的指針大小(32位系統通常是32bit) |
rusage_user |
進程的累計用戶時間 |
rusage_system |
進程的累計系統時間 |
curr_items |
服務器當前存儲的items數量 |
total_items |
從服務器啓動之後存儲的items總數量 |
bytes |
當前服務器存儲items佔用的字節數 |
curr_connections |
當前打開着的鏈接數 |
total_connections |
從服務器啓動之後曾經打開過的鏈接數 |
connection_structures |
服務器分配的鏈接構造數 |
cmd_get |
get命令(獲取)總請求次數 |
cmd_set |
set命令(保存)總請求次數 |
get_hits |
總命中次數 |
get_misses |
總未命中次數 |
evictions |
爲獲取空閒內存而刪除的items數(分配給memcache的空間用滿後須要刪除舊的items來獲得空間分配給新的items) |
bytes_read |
總讀取字節數(請求字節數) |
bytes_written |
總髮送字節數(結果字節數) |
limit_maxbytes |
分配給memcache的內存大小(字節) |
threads |
當前線程數 |
Java客戶端調用memcached有三種方式:
1.
Java自帶的方式
Spring applicationContext.xml中設置
1. <bean id="memcache"
class="com.danga.MemCached.SockIOPool"
2.
factory-method="getInstance" init-method="initialize"
3.
destroy-method="shutDown">
4. <constructor-arg>
5.
<value>memcache</value>
6.
</constructor-arg>
7.
<property name="servers">
8. <list>
9.
<value>${memcache.server}</value>
10. </list>
11.
</property>
12. <property
name="initConn">
13.
<value>${memcache.initConn}</value>
14.
</property>
15. <property
name="minConn">
16.
<value>${memcache.minConn}</value>
17.
</property>
18. <property
name="maxConn">
19.
<value>${memcache.maxConn}</value>
20.
</property>
21. <property
name="maintSleep">
22.
<value>${memcache.maintSleep}</value>
23.
</property>
24. <property
name="nagle">
25. <value>${memcache.nagle}</value>
26.
</property>
27. <property
name="socketTO">
28.
<value>${memcache.socketTO}</value>
29.
</property>
30. </bean>
配置信息
memcache.server=192.168.0.9:11211
memcache.initConn=20
memcache.minConn=10
memcache.maxConn=50
memcache.maintSleep=30
memcache.nagle=false
memcache.socketTO=3000
memcached經常使用方法:
1、設置數據到內存
memCachedClient.set(key, value, cache中存在時長);
2、刪除內存中的數據
memCachedClient.delete(key);
3、取得內存中的數據
memCachedClient.get(key);
2.
Xmemcached方式
java nio的memcached客戶端--xmemcached
memcache
1、xmemcached是什麼?
基於java nio實現的memcached客戶端API
其實是基於我實現的一個簡單nio框架 http://code.google.com/p/yanf4j/ 的基礎上實現的(目前是基於yanf4j
0.54),序列化機制直接挪用spymemcached的Transcoder。
性能方面與spymemcached相比各有優點,spymemcached在windows和linux兩個平臺上的效率差別很大(特別是容器類 大對象的讀寫上),而xmemcached就沒有這個問題,若是你的get操做遠遠多於存儲操做,那麼xmemcached對於get的優化在併發下的效 果更加明顯。
當前1.0-beta版本,支持memcached的分佈式(餘數哈希和一致性哈希算法)。目前已經支持get、set、add、replace、 cas、 append、prepend、批量get/gets、delete、incr、decr、version這幾個協議。API爲阻塞模型,而非 spymemcached的異步模型,異步模型在批處理的時候有優點,可是阻塞模型在編程難度和使用上會容易不少。
後續計劃:1.0 正式穩定版1.1 着重性能優化
2、爲何叫xmemcached?
由於我在廈門(XM)混飯......
3、xmemcached的下載和使用
項目主頁:http://code.google.com/p/xmemcached下載地址:http://code.google.com/p/xmemcached/downloads/list
wiki地址:http://code.google.com/p/xmemcached/w/list
下載的壓縮包中包括了依賴庫、源碼和打包後的jar,放到項目的lib目錄下便可使用。使用:Java代碼
1.
import net.rubyeye.xmemcached.XMemcachedClient;
2.
//XMemcachedClient是線程安全的,能夠被多線程使用
3.
XMemcachedClient client= new XMemcachedClient(ip, port);
4.
//存儲操做
5.
if (!client.set( "hello" , 0 , "dennis" )){
6.
System.err.println( "set
error" );
7.
}
8.
client.add( "hello" , 0 , "dennis" );
9.
client.replace( "hello" , 0 , "dennis" );
10.
11.
//get操做
12.
String name=(String)client.get( "hello" );
13.
14.
//批量獲取
15.
List<String> keys= new ArrayList<String>();
16.
keys.add( "hello" );
17.
keys.add( "test" );
18.
Map<String,Object> map=client.get(keys);
19.
20.
//delete操做
21.
if (!client.delete( "hello" , 1000 )){
22.
System.err.println( "delete
error" );
23.
}
24.
25.
//incr,decr操做
26.
client.incr( "a" , 4 );
27.
client.decr( "a" , 4 );
28.
29.
//查看memcached版本
30.
String version=client.version();
31.
32.
client.shutdown();
33.
xmemcached與spymemcached的對比 :
1、xmemcached比spymemcached有更好的性能表現,在get、set、delete、multi-gets等操做的測試中都遠遠超過或者接近spymemcached。 xmemcached在win32和linux兩個平臺上都有極佳的性能表現。
2、xmemcached支持動態地添加或者移除memcached
server,能夠經過編程或者JMX來作到。
3、xmemcached支持JMX,能夠經過jmx調整性能參數、添加/移除memcached節點、查看統計
4、xmemcached有客戶端統計,能夠統計xmemcached客戶端的各類操做的總次數
5、xmemcached容許調整更多的網絡層參數和優化選項.
6、xmemcached暫未支持二進制協議,計劃在1.2版本中實現。
7、xmemcached的API模型是同步的,而spymemcached的API模型是異步模型,同步模型對應用編程來講更容易使用和直觀。
8、xmemcached的序列化機制,是使用了spymemcached的序列化機制,並作了部分改造。
項目主頁:http://code.google.com/p/xmemcached/
Java memcached 客戶端——XMemcached 發佈1.2.5版本,這是1.2的最後一個小版本,主要的改進以下:
1、合併yanf4j到xmemcached,目前只是簡單的源碼合併,以及去除了不須要的udp支持。所以從1.2.5開始,xmemcached 再也不依賴yanf4j,僅依賴slf4j 。
2、支持SASL驗證。memcached 1.4.3新增了SASL受權特性,啓用了SASL的memcached會要求客戶端進行受權驗證,不然將拒絕請求,對於須要驗證的用戶來講是個可選的特性,關於memcached的SASL支持更多請看這裏。Xmemcached 1.2.5開始支持客戶端的SASL驗證,一個典型的使用例子以下:
1.
MemcachedClientBuilder builder = new XMemcachedClientBuilder(
2.
AddrUtil.getAddresses( "localhost:11211" ));
3.
builder.addAuthInfo(AddrUtil.getOneAddress( "localhost:11211" ), AuthInfo
4.
.typical( "cacheuser" , "123456" ));
5.
// Must use binary protocol
6.
builder.setCommandFactory( new BinaryCommandFactory());
7.
MemcachedClient client=builder.build();
3、加快MemcachedClient.shutdown()方法的速度,應用能夠更快地關閉xmemcached。
4、完善中文用戶指南 ,添加客戶端分佈和SASL驗證兩節。
更多信息請參見wiki和changelog
XMemcached是一個基於java
nio的memcached 客戶端
項目主頁: http://code.google.com/p/xmemcached/