• java版的memcached client及使用文档


    假设我们有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);
    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) };
    Mapvalues = 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 )替代. 
    Meetup.com实践过程中得出的一个经验 ,项目中model 对象implement Externalizable 实现序列化,
    可以节省cache 对象的大小。从而节省网络带宽和内存空间。
  • 相关阅读:
    lcx
    交换网络中存在的攻击及加固方法概括
    Hello world~
    CCSPSECURE1 安全理论
    SQL注入经验总结
    Access Control List
    初探java集合框架图
    深入浅出分析LinkedHashMap
    红黑树实现分析
    深入浅出的分析TreeMap
  • 原文地址:https://www.cnblogs.com/zhaobl/p/1502049.html
Copyright © 2020-2023  润新知