memcached 在Java實例中的使用

因爲在實際應用的中的的業務邏輯和實體緩存數據比較複雜,在這裏通過一個簡單的實例來進行說明。


1、下載工具包文件,地址:https://github.com/gwhalin/Memcached-Java-Client/downloads

下載後解壓:裏面存在四個jar文件,分別爲:commons-pool-1.5.6.jar、slf4j-api-1.6.1.jar、slf4j-simple-1.6.1.jar、java_memcached-release_2.6.6.jar。


2、將四個工具包加載並完成工具類的編寫,代碼如下:



package xft.workbench.servers.memcached;

import java.util.Date;

import org.apache.log4j.Logger;

import xft.workbench.servers.spring.SysPropertyConfigure;
import xft.workbench.servers.util.EmptyUtil;

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

/**
 * 
 * 
功能描述:Memcached的工具類
 *
 * @author :
* * 修改歷史:(修改人,修改時間,修改原因/內容) * *
*/ public final class MemcachedUtil { private static Logger logger = Logger.getLogger(MemcachedUtil.class); /** * 構造函數:工具類,禁止實例化 * */ private MemcachedUtil() { } // 創建全局的唯一實例 private static MemCachedClient mcc = new MemCachedClient(); /** * 自身實例 */ private static MemcachedUtil memcachedUtil = new MemcachedUtil(); // 設置與緩存服務器的連接池 static { try{ String serversStr="127.0.0.1:11211,192.168.1.22:11211"; String weightsStr="3,7"; if(EmptyUtil.isEmpty(serversStr) || EmptyUtil.isEmpty(weightsStr)){ throw new Exception("系統異常!請設置memcached的服務器列表和其權重信息!"); } // 服務器列表和其權重 String[] servers = serversStr.split(",");// Ip地址和端口號 // 權重 String[] weightsStrs=weightsStr.split(","); Integer[] weights = new Integer[weightsStrs.length]; for(int i =0;i功能描述:獲取唯一實例. * * @return * * * */ public static MemcachedUtil getInstance(){ logger.info("MemcachedUtil成功獲得"); return memcachedUtil; } /** * *
功能描述:新增一個緩存數據
     * 
      *
     * @param key 緩存的key
     * @param value 緩存的值
     * @return 操作結果
     
     *
     *
     * 
*/ public boolean add(String key, Object value) throws Exception{ logger.info("新增一個緩存數據,key="+key+",value="+value.toString()); // 不會存入緩存 return mcc.add(key, value); // return mcc.set(key, value); } /** * *
功能描述:新增一個緩存數據
     * 
     *
     * @param key 緩存的key
     * @param value 緩存的值
     * @param expiry 緩存過期的時間
     * @return 操作結果
     *
     * 
*/ public boolean add(String key, Object value, Date expiry) throws Exception{ logger.info("新增一個緩存數據,key="+key+",value="+value.toString()+",expiry="+expiry.getTime()); // 不會存入緩存 return mcc.add(key, value, expiry); // return mcc.set(key, value, expiry); } /** *
功能描述:替換已有的緩存數據
     * 
      *
     * @param key 設置對象的key
     * @return Object 設置對象的值
     * @return 是否替換成功
     * 
     *
     * 
*/ public boolean replace(String key, Object value) throws Exception{ logger.info("替換已有的緩存數據,key="+key+",value="+value.toString()); return mcc.replace(key, value); } /** * *
功能描述:替換已有的緩存數據
     * 
     * @param key 設置對象的key
     * @return Object 設置對象的值
     * @param expiry 過期時間
     * @return 是否替換成功
     *
      *
     * 
*/ public boolean replace(String key, Object value, Date expiry) throws Exception{ logger.info("替換已有的緩存數據,key="+key+",value="+value.toString()+",expiry="+expiry.getTime()); return mcc.replace(key, value, expiry); } /** * *
功能描述:根據指定的關鍵字獲取對象
     * 
     *
     * @param key 獲取對象的key
     * @return Object 對象值
     *
     *
     * 
*/ public Object get(String key) { Object obj=null; try{ obj=mcc.get(key); logger.info("根據指定的關鍵字獲取對象,key="+key+",value="+obj.toString()); }catch(Exception e){} return obj; } /** * *
功能描述:根據指定的關鍵字刪除對象
     *
     * @param key 獲取對象的key
     * @return 是否成功刪除
     *
     *
     * 
*/ public boolean delete(String key) throws Exception{ logger.info("根據指定的關鍵字刪除對象,key="+key); return mcc.delete(key); } }


3、測試,代碼如下 :

 public static void main(String[] args) {

        MemcachedUtil cache = MemcachedUtil.getInstance();
        
        cache.add("key1", "key1_test");
        cache.add("key2", "key2_test",new Date(10*1000));//只保留10秒
        
        System.out.println(cache.get("key1"));
        System.out.println(cache.get("key2"));
        try {
			Thread.sleep(11*1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        System.out.println("11秒過後的緩存中key對應值的情況");
        
        
        System.out.println(cache.get("key1"));
        System.out.println(cache.get("key2"));
        
    }

運行結果:


最後顯示null表示前面設置的key2只在內存中緩存10秒起了作用所以第二次沒有查詢到對應該數據。








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