天天看點

Java MemCached 緩存實作

首先建立MemCached 緩存管理類,此代碼測試需要添加 java_memcached-release_2.6.3.jar,commons-pool-1.5.6.jar,slf4j-api-1.6.1.jar,slf4j-simple-1.6.1.jar 這幾個jar包

import java.util.Date;

import org.apache.commons.net.telnet.TelnetClient;

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

/**
 * 緩存管理類
 * 
 * @author  @ 2014-4-24
 */
public class MemCachedManager {

    /**
     * 記錄日志
     */
    private static LoggerUtil log = LoggerUtil.getInstance(MemCachedManager.class);

    /**
     * 建立緩存用戶端
     */
    public static MemCachedClient mcc = new MemCachedClient();

    /**
     * 緩存管理對象
     */
    private static MemCachedManager memCached = null;

    private static boolean isSuccess = true;
    // 設定與緩存伺服器的連接配接池
    static {
        
        //判斷緩存是否服務是否開啟
        TelnetClient telnet = new TelnetClient();
        try {
            String[] sers="192.168.15.1:11211".split(":");
            telnet.connect(sers[0],Integer.parseInt(sers[1]));
        } catch (Exception e) {
            log.error("緩存初始化錯誤", e);
            isSuccess = false;
        }

        // 伺服器清單和其權重
        String[] servers = {"192.168.15.1:11211"};
        Integer[] weights = {3};

        // 擷取socke連接配接池的執行個體對象
        SockIOPool pool = SockIOPool.getInstance();

        // 設定伺服器資訊
        pool.setServers(servers);
        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(1000);
        pool.setSocketConnectTO(0);

        // 初始化連接配接池
        pool.initialize();

    }

    /**
     * 私有構造方法,不允許執行個體化!
     * 
     */
    private MemCachedManager() {
    }

    /**
     * 擷取唯一執行個體.
     * 
     * @return 緩存管理對象
     */
    public static MemCachedManager getInstance() {
        if (memCached == null) {
            memCached = new MemCachedManager();
        }

        return memCached;

    }

    /**
     * 添加一個指定的值到緩存中.
     * 
     * @param key
     *            主鍵
     * @param value
     *            值
     * @return 是否成功
     */
    public boolean add(String key, Object value) {
        if (isSuccess) {
            return mcc.add(key, value);
        } else {
            return false;
        }
    }

    /**
     * 添加一個指定的值到緩存中.
     * 
     * @param key
     *            主鍵
     * @param value
     *            值
     * @param expiry
     *            失效時間
     * @return 是否成功
     */
    public boolean add(String key, Object value, Date expiry) {
        if (isSuccess) {
            return mcc.add(key, value, expiry);
        } else {
            return false;
        }
    }

    /**
     * 替換緩存
     * 
     * @param key
     *            主鍵
     * @param value
     *            值
     * @return 是否成功
     */
    public boolean replace(String key, Object value) {
        if (isSuccess) {
            return mcc.replace(key, value);
        } else {
            return false;
        }
    }

    /**
     * 替換緩存
     * 
     * @param key
     *            主鍵
     * @param value
     *            值
     * @param expiry
     *            失效時間
     * @return 是否成功
     */
    public boolean replace(String key, Object value, Date expiry) {
        if (isSuccess) {
            return mcc.replace(key, value, expiry);
        } else {
            return false;
        }
    }

    /**
     * 根據指定的關鍵字擷取對象.
     * 
     * @param key
     *            主鍵
     * @return 緩存對象的值
     */
    public Object get(String key) {
        if (isSuccess) {
            return mcc.get(key);
        } else {
            return null;
        }
    }
    
    /**删除緩存
     * @param key 主鍵
     * @return 是否删除成功
     */
    public boolean delete(String key)
    {
        if (isSuccess) {
            return mcc.delete(key);
        } else {
            return false;
        }
        
    }

   /**判斷緩存是否存在
     * @param key 主鍵
     * @return 是否存在
     */    
    public boolean keyExists(String key) {
        if (isSuccess) {
            return mcc.keyExists(key);
        } else {
            return false;
        }
    }

}
           

  測試:

  

    MemCachedManager cache = MemCachedManager.getInstance();
        long startDate = System.currentTimeMillis();

              
        //cache.delete("test2");
      //設定失效時間15s, 預設為0,永不失效,此時間最大不能超過30天 
        //cache.add("test2", "ffff",new Date(15000));
        long endDate = System.currentTimeMillis();
        long nowDate = (endDate - startDate);
        System.out.println(nowDate);
        
        System.out.print(" get value : " + cache.get("test2"));      

轉載于:https://www.cnblogs.com/Adhere/p/3781609.html