一个例子
    官方网站 
    
      
        http://www.whalin.com/memcached/
        
      
    
    
  
    ==============
    
     假设我们有3台memcached 服务器,server1 和server2 有3GB 的内存空间,server3 有2GB 的内存空间.下面程序说明怎么来创建客户端.
  
        
          import
        
         com.danga.MemCached.*;
        
        
        
          public
        
         class MyClass {
        
        
        
          // 创建一个 memcached 客户端对象
          
        
        
        
          protected
        
        
          static
        
         MemCachedClient mcc = 
        
          new
        
         MemCachedClient();
        
        
        
          // 创建  memcached连接池
          
        
        
        
          static
        
        
        
        {  
        
          // 指定memcached服务地址
          
        
        
          String
        
        [] servers =
        
        { 
        
          "server1.mydomain.com:1121"
        
        ,
        
          "server2.mydomain.com:1121"
        
        , 
        
          "server3.mydomain.com:1121"
        
         };
        
        
          // 指定memcached服务器负载量
          
        
        
          Integer
        
        []  weights    ={ 3, 3, 2 };
        
        
          // 从连接池获取一个连接实例
          
        
        
        SockIOPool pool = SockIOPool.getInstance();
        
        
        
          // 设置服务器和服务器负载量
          
        
        
        pool.setServers( servers );
        
        
        pool.setWeights( weights );
        
        
        
          // 设置一些基本的参数
          
        
        
        
          //设置初始连接数5   最小连接数 5   最大连接数 250
          
        
        
        
          //设置一个连接最大空闲时间6小时
          
        
        
        pool.setInitConn( 5 );
        
        
        pool.setMinConn( 5 );
        
        
        pool.setMaxConn( 250 );
        
        
        pool.setMaxIdle( 1000 * 60 * 60 * 6 );
        
        
        
          // 设置主线程睡眠时间
          
        
        
        
          // 每隔30秒醒来  然后
          
        
        
        
          // 开始维护 连接数大小
          
        
        
        pool.setMaintSleep( 30 );
        
        
        
          // 设置tcp 相关的树形
          
        
        
        
          // 关闭nagle算法
          
        
        
        
          // 设置 读取 超时3秒钟  set the read timeout to 3 secs
          
        
        
        
          //  不设置连接超时
          
        
        
        pool.setNagle( 
        
          false
        
         );
        
        
        pool.setSocketTO( 3000 );
        
        
        pool.setSocketConnectTO( 0 );
        
        
        
          // 开始初始化 连接池
          
        
        
        pool.initialize();
        
        
        
          // 设置压缩模式
          
        
        
        
          //如果超过64k压缩数据
          
        
        
        mcc.setCompressEnable( 
        
          true
        
         );
        
        
        mcc.setCompressThreshold( 64 * 1024 );
        
        
        }
        
        
        
          public
        
        
          static
        
         void examples() {
        
        
        mcc.set( 
        
          "foo"
        
        , 
        
          "This is a test 
          
            String
          
          "
        
         );
        
        
        
          String
        
         bar = mcc.get( 
        
          "foo"
        
         );
        
        
        }
        
        
        }
      
    MemCachedClient 类 常用的方法说明
创建 client对象 设置参数:
MemCachedClient mc = new MemCachedClient();
        //压缩模式
        
         mc.setCompressEnable(true);
      
        // 如果 cache数据 大于4 KB 就启用压缩
        
         mc.setCompressThreshold(4096);
      
        // 基本类型tostring方法
        
         // 通常不需要设置
        
         mc.setPrimitiveAsString(true);
      
存储一个对象:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "cacheKey1"
        
        ;
        
        
        
          Object
        
         value = SomeClass.getObject();
        
        
        mc.set(key, value);
      
    用客户端hashcode 存储一个对象:
    
  
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "cacheKey1"
        
        ;
        
        
        
          Object
        
         value = SomeClass.getObject();
        
        
        
          Integer
        
         hash = 
        
          new
        
        
          Integer
        
        (45);
        
        
        mc.set(key, value, hash);
        
        
        set方法:在cache中存储一个指定对象
        
        
           add 和replace 方法功能差不多
        
        
        	add -- 如果不存在 这个key的对象,将会存储一个对象到cache中
        
        	replace --只有当存在指定key对象的时候 会覆盖已有对象
      
    删除一个对象:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "cacheKey1"
        
        ;
        
        
        mc.delete(key);
      
    结合hashcode 删除一个对象:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "cacheKey1"
        
        ;
        
        
        
          Integer
        
         hash = 
        
          new
        
        
          Integer
        
        (45);
        
        
        mc.delete(key, hashCode);
      
    怎么cache计数,增 减计数:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "counterKey"
        
        ;
        
        
        mc.storeCounter(key, 
        
          new
        
        
          Integer
        
        (100));
        
        
        
          System
        
        .out.println(
        
          "counter after adding      1: "
        
         mc.incr(key));
        
        
        
          System
        
        .out.println(
        
          "counter after adding      5: "
        
         mc.incr(key, 5));
        
        
        
          System
        
        .out.println(
        
          "counter after subtracting 4: "
        
         mc.decr(key, 4));
        
        
        
          System
        
        .out.println(
        
          "counter after subtracting 1: "
        
         mc.decr(key));
      
    利用客户端的hashcode存储计数 增减 计数:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "counterKey"
        
        ;
        
        
        
          Integer
        
         hash = 
        
          new
        
        
          Integer
        
        (45);
        
        
        mc.storeCounter(key, 
        
          new
        
        
          Integer
        
        (100), hash);
        
        
        
          System
        
        .out.println(
        
          "counter after adding      1: "
        
         mc.incr(key, 1, hash));
        
        
        
          System
        
        .out.println(
        
          "counter after adding      5: "
        
         mc.incr(key, 5, hash));
        
        
        
          System
        
        .out.println(
        
          "counter after subtracting 4: "
        
         mc.decr(key, 4, hash));
        
        
        
          System
        
        .out.println(
        
          "counter after subtracting 1: "
        
         mc.decr(key, 1, hash));
      
    获取一个对象:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "key"
        
        ;
        
        
        
          Object
        
         value = mc.get(key);
      
    用客户端hashcode获取一个对象:
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
         key   = 
        
          "key"
        
        ;
        
        
        
          Integer
        
         hash = 
        
          new
        
        
          Integer
        
        (45);
        
        
        
          Object
        
         value = mc.get(key, hash);
      
    从cache 中获取多个对象
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        
          String
        
        [] keys      ={ 
        
          "key"
        
        , 
        
          "key1"
        
        , 
        
          "key2"
        
         };Mapvalues = mc.getMulti(keys);
      
    用客户端hashcode() 从cache中获取多个对象
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
          String
        
        [] keys      = { 
        
          "key"
        
        , 
        
          "key1"
        
        , 
        
          "key2"
        
         };
        
        
        
        
          Integer
        
        [] hashes   =
        
        { 
        
          new
        
        
          Integer
        
        (45), 
        
          new
        
        
          Integer
        
        (32), 
        
          new
        
        
          Integer
        
        (44) };
        
        
        
        Map<
        
          Object
        
        > values = mc.getMulti(keys, hashes);
      
    
    
  
清空所有的对象
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        mc.flushAll();
      
    得到服务器memcached的状态信息
        MemCachedClient mc = 
        
          new
        
         MemCachedClient();
        
        
        Map stats = mc.stats();
      
    注意点
1:Failover/Failback
当一个memcached服务器失效的时候客户端默认会failover另一个服务去.
    如果失效的服务器 恢复运行,客户端会返回到原来连接的服务器.
    
     如果你不想用这个功能 设置下面的参数
    
     pool.setFailover( false );
    
     pool.setFailback( false );
  
2:序列化
Boolean
    Byte
    
     String
    
     Character
    
     StringBuffer
    
     StringBuilder
    
     Short
    
     Long
    
     Double
    
     Float
    
     Date
    
     java默认的类型没有实现序列化 可以设置
    
     mcc.setPrimitiveAsString( true )替代. 
    
  
Externalizable 实现序列化,可以节省cache 对象的大小。从而节省网络带宽和内存空间。
出处:http://hqman.blog.bokee.net/bloggermodule/blog_printEntry.do?id=980314


 
					 
					