memcached demo 应用例子

本文介绍Memcached——一种高性能的分布式内存对象缓存系统的工作原理及其在动态Web应用中的使用方式。通过一个Java示例展示了如何利用Memcached进行数据缓存,减轻数据库负载并提高网站响应速度。

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据 库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目); 当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

  Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数 据库负载大幅度降低,更好的分配资源,更快速访问。 

 1  package  com.ctoall.core;
 2  
 3  import  java.io.Serializable;
 4  
 5  public   class  StudentDO  implements  Serializable {
 6  
 7       /**
 8       * 
 9        */
10       private   static   final   long  serialVersionUID  =   3312721104787630488L ;
11       private   int  Id;
12       private  String Name;
13       private   int  age;
14       private  String address;
15       public   int  getId() {
16           return  Id;
17      }
18       public   void  setId( int  id) {
19          Id  =  id;
20      }
21       public  String getName() {
22           return  Name;
23      }
24       public   void  setName(String name) {
25          Name  =  name;
26      }
27       public   int  getAge() {
28           return  age;
29      }
30       public   void  setAge( int  age) {
31           this .age  =  age;
32      }
33       public  String getAddress() {
34           return  address;
35      }
36       public   void  setAddress(String address) {
37           this .address  =  address;
38      }
39      
40  }

 

   1  package  com.ctoall.core;

  2  
  3  import  java.util.Date;
  4  
  5  import  com.danga.MemCached.MemCachedClient;
  6  import  com.danga.MemCached.SockIOPool;
  7  
  8  
  9  public   class  MemCached {
 10        //  创建全局的唯一实例
 11       protected   static  MemCachedClient mcc  =   new  MemCachedClient();
 12      
 13       protected   static  MemCached memCached  =   new  MemCached();
 14       //  设置与缓存服务器的连接池
 15       static  {
 16           //  服务器列表和其权重
 17          String[] servers  =  { " 192.168.186.128:11211 " };
 18          Integer[] weights  =  { 3 };
 19  
 20           //  获取socke连接池的实例对象
 21          SockIOPool pool  =  SockIOPool.getInstance();
 22  
 23           //  设置服务器信息
 24          pool.setServers( servers );
 25          pool.setWeights( weights );
 26  
 27           //  设置初始连接数、最小和最大连接数以及最大处理时间
 28          pool.setInitConn(  5  );
 29          pool.setMinConn(  5  );
 30          pool.setMaxConn(  250  );
 31          pool.setMaxIdle(  1000   *   60   *   60   *   6  );
 32  
 33           //  设置主线程的睡眠时间
 34          pool.setMaintSleep(  30  );
 35  
 36           //  设置TCP的参数,连接超时等
 37          pool.setNagle(  false  );
 38          pool.setSocketTO(  3000  );
 39          pool.setSocketConnectTO(  0  );
 40  
 41           //  初始化连接池
 42          pool.initialize();
 43  
 44           //  压缩设置,超过指定大小(单位为K)的数据都会被压缩
 45          mcc.setCompressEnable(  true  );
 46          mcc.setCompressThreshold(  64   *   1024  );
 47      }
 48       /**
 49       * 保护型构造方法,不允许实例化!
 50       *
 51        */
 52       protected  MemCached()
 53      {
 54          
 55      }
 56      
 57       /**
 58       * 获取唯一实例.
 59       *  @return
 60        */
 61       public   static  MemCached getInstance()
 62      {
 63           return  memCached;
 64      }
 65      
 66       /**
 67       * 添加一个指定的值到缓存中.
 68       *  @param  key
 69       *  @param  value
 70       *  @return
 71        */
 72       public   boolean  add(String key, Object value)
 73      {
 74           return  mcc.add(key, value);
 75      }
 76      
 77       public   boolean  add(String key, Object value, Date expiry)
 78      {
 79           return  mcc.add(key, value, expiry);
 80      }
 81      
 82       public   boolean  replace(String key, Object value)
 83      {
 84           return  mcc.replace(key, value);
 85      }
 86      
 87       public   boolean  replace(String key, Object value, Date expiry)
 88      {
 89           return  mcc.replace(key, value, expiry);
 90      }
 91      
 92       /**
 93       * 根据指定的关键字获取对象.
 94       *  @param  key
 95       *  @return
 96        */
 97       public  Object get(String key)
 98      {
 99           return  mcc.get(key);
100      }
101      
102       public   static   void  main(String[] args)
103      {
104          MemCached cache  =  MemCached.getInstance();
105         StudentDO stuDO = new  StudentDO();
106         stuDO.setId( 10 );
107         stuDO.setAge( 28 );
108         stuDO.setName( " sunney " );
109         stuDO.setAddress( " 广东省深圳市福田区梅华路105号多丽科技楼9楼 " ); 
110         cache.add( " stu " , stuDO);
111         StudentDO stuDO1 = (StudentDO)cache.get( " stu " );
112         System.out.println( " id: " + stuDO1.getId());
113         System.out.println( " name: " + stuDO1.getName());
114         System.out.println( " age: " + stuDO1.getAge());
115         System.out.println( " adress: " + stuDO1.getAddress());
116         System.out.println( " +++++++++++++++++++++++ok++++++++++++++++++++++++ " );
117              
118      }
119  }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值