缓存工具——Memcached

在涉及到系统性能问题上,缓存已是一个必备的技术方案,在软件开发中,开源的缓存框架还是挺多的,以前用ehcache,最近接触了另一个缓存框架:Memcached。不管哪个产品,理念都是一样的,缓存数据,减少数据库负载,提高访问速度。

        这里单独做了一个memcached的demo,缓存数据、设置缓存时间等等,可以作为了解memcached的入门实例。步骤简单,代码简单,最后提供了链接,可以下载并把这个demo跑起来。

        首先,需要安装memcached的客户端,下载

        其次,就是代码实现(需要memcached.jar,其中包含了java实现memcached服务的插件):

       模拟从数据库查询用户信息:

[java]  view plain copy
  1. public User queryUserInfo(){  
  2.         MemberCache cache = new MemberCache();  
  3.         if(cache.get("user")!=null){  
  4.             System.out.println("------------存在缓存中-------------");  
  5.             return (User) cache.get("user");  
  6.         }else{  
  7.             System.out.println("---------------缓存中不存在----------------");  
  8.             User user = new User();  
  9.             user.setUsername("柳松");  
  10.             user.setPassword("123456");  
  11.             boolean b = cache.set("user", user,new Date(10000));  
  12.             System.out.println(b);  
  13.             return form;  
  14.         }  
  15.     }  
       memcached工具类的实现:

[java]  view plain copy
  1. public class MemberCache {  
  2.       
  3.     // 创建全局的唯一实例   
  4.     protected static MemCachedClient mcc = new MemCachedClient();  
  5.       
  6.     static{  
  7.          // 服务器列表和其权重  
  8.         String[] servers = { "127.0.0.1:11211" };  
  9.         Integer[] weights = { 3 };    
  10.         // 获取socke连接池的实例对象   
  11.         SockIOPool pool = SockIOPool.getInstance();   
  12.           
  13.         // 设置服务器信息   
  14.         pool.setServers(servers);    
  15.         pool.setWeights(weights);   
  16.           
  17.      // 设置初始连接数、最小和最大连接数以及最大处理时间    
  18.         pool.setInitConn(5);    
  19.         pool.setMinConn(5);    
  20.         pool.setMaxConn(250);    
  21.         pool.setMaxIdle(1000 * 60 * 60 * 6);    
  22.     
  23.         // 设置主线程的睡眠时间    
  24.         pool.setMaintSleep(30);    
  25.     
  26.         // 设置TCP的参数,连接超时等    
  27.         pool.setNagle(false);    
  28.         pool.setSocketTO(3000);    
  29.         pool.setSocketConnectTO(0);    
  30.     
  31.         // 初始化连接池    
  32.         pool.initialize();    
  33.     
  34.         // 压缩设置,超过指定大小(单位为K)的数据都会被压缩    
  35.         mcc.setCompressEnable(true);    
  36.         mcc.setCompressThreshold(64 * 1024);    
  37.     }    
  38.   
  39.       
  40.     /** 
  41.      * 添加一个指定的值到缓存中. 
  42.      *  
  43.      * @param key 
  44.      * @param value 
  45.      * @return 
  46.      */  
  47.     public boolean put(String key, Object value) {  
  48.         return mcc.add(key, value);  
  49.     }  
  50.     /** 
  51.      * 指定缓存时间 
  52.      * @param key 
  53.      * @param value 
  54.      * @param expiry 
  55.      * @return 
  56.      */  
  57.     public boolean put(String key, Object value, Date expiry) {  
  58.         return mcc.add(key, value, expiry);  
  59.     }  
  60.   
  61.     public boolean replace(String key, Object value) {  
  62.         return mcc.replace(key, value);  
  63.     }  
  64.   
  65.     public boolean replace(String key, Object value, Date expiry) {  
  66.         return mcc.replace(key, value, expiry);  
  67.     }  
  68.       
  69.     public boolean set(String key,Object value,Date expiry){  
  70.         return mcc.set(key, value,expiry);  
  71.     }  
  72.   
  73.     /** 
  74.      * 根据指定的关键字获取对象. 
  75.      *  
  76.      * @param key 
  77.      * @return 
  78.      */  
  79.     public Object get(String key) {  
  80.         Object rv = mcc.get(key);  
  81.         return rv;  
  82.     }  
  83. }  
        由于设置了10s的缓存期限,在10s内执行两次查询,输出结果:

        demo链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值