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秒起了作用所以第二次没有查询到对应该数据。








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