【Memcached】memchached網絡服務協議介紹說明

1.memcached服務協議

https://github.com/memcached/memcached/blob/master/doc/protocol.txt

2.memCached協議基本操作

 

1)存儲命令
  set 數據塊
  add 
  replace
  
  完整的存儲命令:其中\r\n是回車換行
  <command name> <key> <flags> <exptime> <byteds>\r\n
  <data block>\r\n
  
  樣例:
  set user 0 180 5
	huang
	STORED

	get user
	VALUE user 0 5
	huang
	END
  
2)讀取命令
  get 關鍵字
  
3)其他命令
  flush_all
  version
  stats

3. 下載Java MemCached客戶端,解壓縮後將所有jar文件拷貝到java工程的lib目錄下或者classpath目錄下

https://github.com/downloads/gwhalin/Memcached-Java-Client/java_memcached-release_2.6.6.zip


4.編寫Java訪問memcached服務端的代碼

package hxb.memcached;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

public class KypuloCachedManager {
	private static KypuloCachedManager cachedManager ;
	//MemCached客戶端類
	private MemCachedClient memCachedClient = new MemCachedClient();
	//MemCached服務端節點,在分佈式環境中包含了多個server
	private String[] memCachedServers = {"192.168.146.128:11211"};
	//各服務端節點負載均衡權重數
	private Integer[] weights ={3};
	
	private  KypuloCachedManager()
	{
		initCachedPool();
	}
	
	private void initCachedPool() {
		SockIOPool pool  = SockIOPool.getInstance();
		pool.setServers(memCachedServers);
		pool.setWeights(weights);
		 // 設置初始連接數、最小和最大連接數以及最大處理時間
        pool.setInitConn( 5 );
        pool.setMinConn( 5 );
        pool.setMaxConn( 250 );
        pool.setMaxIdle( 1000 * 60 * 60 * 6 );
        
        // 設置主線程的睡眠時間
        pool.setMaintSleep( 30 );
  
        // 設置TCP的參數,連接超時等
        pool.setNagle( false );
        pool.setSocketTO( 3000 );
        pool.setSocketConnectTO( 0 );
     // 初始化連接池
		pool.initialize();
	}

	public synchronized static KypuloCachedManager getInstance()
	{
		if(cachedManager==null)
		{
			cachedManager= new KypuloCachedManager();
		}
		return cachedManager;
	}
	
	/**
	 * 緩存一個對象
	 * @param key 對象關鍵字
	 * @param value 需要存儲的對象
	 * @return 緩存成功返回true 失敗返回false
	 */
	public boolean add(String key, Object value)
	{
		return this.memCachedClient.add(key, value);
	}
	
	/**
	 * 更新緩存中的一個對象
	 * @param key 對象關鍵字
	 * @param value 刷新的的對象
	 * @return
	 */
	public boolean update(String key , Object value)
	{
		return this.memCachedClient.replace(key, value);
	}
	
	/**
	 * 獲取緩存中指定關鍵字的對象
	 * @param key 對象關鍵字
	 * @return 緩存的對象
	 */
	public Object get(String key)
	{
		return this.memCachedClient.get(key);
	}
	
	public static void main(String[] args) {
		KypuloCachedManager cachedManagerInstance = KypuloCachedManager.getInstance();
		cachedManagerInstance.add("username", "Kypulo");
		System.out.println("Get username from cached:"+cachedManagerInstance.get("username"));
		
		cachedManagerInstance.update("username", "Huangxiaobing");
		System.out.println("Get username from cached after update:"+cachedManagerInstance.get("username"));
		
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章