Memcached

一,Windows下的Memcache安裝

1.
下載memcachewindows穩定版,解壓放某個盤下面,好比在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(memcachedip) -s 127.0.0.1:11212(memcachedip) -b 127.0.0.1:11213(備份memcachedip) 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個字符。須要注意的是,250memcached服務器端內部的限制,若是您使用的客戶端支持」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 niomemcached客戶端--xmemcached
memcache

1xmemcached是什麼?

基於java nio實現的memcached客戶端API

其實是基於我實現的一個簡單nio框架 http://code.google.com/p/yanf4j/ 的基礎上實現的(目前是基於yanf4j
0.54)
,序列化機制直接挪用spymemcachedTranscoder

性能方面與spymemcached相比各有優點,spymemcachedwindowslinux兩個平臺上的效率差別很大(特別是容器類 大對象的讀寫上),而xmemcached就沒有這個問題,若是你的get操做遠遠多於存儲操做,那麼xmemcached對於get的優化在併發下的效 果更加明顯。

當前1.0-beta版本,支持memcached的分佈式(餘數哈希和一致性哈希算法)。目前已經支持getsetaddreplace cas appendprepend、批量get/getsdeleteincrdecrversion這幾個協議。API爲阻塞模型,而非 spymemcached的異步模型,異步模型在批處理的時候有優點,可是阻塞模型在編程難度和使用上會容易不少。

後續計劃:1.0 正式穩定版1.1 着重性能優化

2、爲何叫xmemcached?



由於我在廈門(XM)混飯......



3xmemcached的下載和使用



項目主頁: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.
    



xmemcachedspymemcached的對比 
1
xmemcachedspymemcached有更好的性能表現,在getsetdeletemulti-gets等操做的測試中都遠遠超過或者接近spymemcached xmemcachedwin32linux兩個平臺上都有極佳的性能表現。
2
xmemcached支持動態地添加或者移除memcached
server,
能夠經過編程或者JMX來作到。
3
xmemcached支持JMX,能夠經過jmx調整性能參數、添加/移除memcached節點、查看統計
4
xmemcached有客戶端統計,能夠統計xmemcached客戶端的各類操做的總次數
5
xmemcached容許調整更多的網絡層參數和優化選項.
6
xmemcached暫未支持二進制協議,計劃在1.2版本中實現。
7
xmemcachedAPI模型是同步的,而spymemcachedAPI模型是異步模型,同步模型對應用編程來講更容易使用和直觀。

8xmemcached的序列化機制,是使用了spymemcached的序列化機制,並作了部分改造。

項目主頁:http://code.google.com/p/xmemcached/

Java memcached 客戶端——XMemcached 發佈1.2.5版本,這是1.2的最後一個小版本,主要的改進以下:

1、合併yanf4jxmemcached,目前只是簡單的源碼合併,以及去除了不須要的udp支持。所以從1.2.5開始,xmemcached 再也不依賴yanf4j,僅依賴slf4j 

2、支持SASL驗證。memcached 1.4.3新增了SASL受權特性,啓用了SASLmemcached會要求客戶端進行受權驗證,不然將拒絕請求,對於須要驗證的用戶來講是個可選的特性,關於memcachedSASL支持更多請看這裏Xmemcached 1.2.5開始支持客戶端的SASL驗證,一個典型的使用例子以下:



Java代碼 





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驗證兩節。

更多信息請參見wikichangelog

XMemcached是一個基於java
nio
memcached 客戶端

項目主頁: http://code.google.com/p/xmemcached/

下載地址: http://code.google.com/p/xmemcached/downloads/list

wiki地址:http://code.google.com/p/xmemcached/w/list

相關文章
相關標籤/搜索