duke

分享经验,分享快乐

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

    最近为了解决系统性能问题,研究了一下memcache。由于其可以独立部署不占用JVM资源,其优越性可得而知,更由于memcached支持分布式部署这也使得可以实现超大内存服务器。具体memcache是哪个高手之作,再次不在赘述。

    memcached的分布式有个奇怪的特点是其分布式的方式有客户端决定,所以客户端算法显得格外重要(hash算法 主流consist),笔者在此不在多说,有兴趣的可以下去研究。下面开始讲如何使用(后续会把源代码上传)。

1. 创建连接池设置相应参数

  

public class MemcacheClientBean {

    static MemCachedClient mClient;

    static {
        // 获取socket连接池的实例对象
        SockIOPool ioPool = SockIOPool.getInstance();
        // 服务器列表和其权重
        String[] servers = { "192.168.6.40:11211", "192.168.6.40:11212" };
        Integer[] weights = { 3 };
        // 设置服务器信息
        ioPool.setServers(servers);
        ioPool.setWeights(weights);

        // 设置初始连接数、最小和最大连接数以及最大处理时间
        ioPool.setInitConn(5);
        ioPool.setMinConn(5);
        ioPool.setMaxConn(250);
        ioPool.setMaxIdle((1000 * 60 * 60L));
        // 设置主线程的睡眠时间,单位为秒
        ioPool.setMaintSleep(30);
        ioPool.setNagle(false);
        // 连接建立后的超时时间
        ioPool.setSocketTO(3000);
        // 连接建立时的超时时间
        ioPool.setSocketConnectTO(0);
        // 初始化连接池
        ioPool.initialize();

    }
    public static MemCachedClient getClient() {

        mClient = new MemCachedClient();
        mClient.setPrimitiveAsString(true);

        return mClient;
    }
}

不管是DB还是缓存,只要涉及到连接数及资源的限制设置都会涉及到连接池,所有请求由连接池统一管理。

2. 使用memcache常用方法 set get add replace等等

    

public class MClientTest {
    MemCachedClient mClient;
    boolean isOK = false;

    @Before
    public void init() {
        mClient = MemcacheClientBean.getClient();
    }

    @Test
    public void testSetCache() {
        isOK = mClient.set("test", "不错");
        System.out.println(isOK ? ">>>>>>>>>>>>>>set ok" : ">>>>>>>>>>>>>>set fail");
    }

    @Test
    public void testGetCache() {
        System.out.println(mClient.get("test"));
    }

    @Test
    public void testAddCache() {
//        isOK = mClient.add("test", "你好");
        isOK = mClient.add("test2", "你好");
        System.out.println(isOK ? ">>>>>>>>>>>>>>add ok" : ">>>>>>>>>>>>>>add fail");
    }
    @Test
    public void testReplaceCache() {
        isOK = mClient.replace("test2", "我很好");
        System.out.println(isOK ? ">>>>>>>>>>>>>>replace ok" : ">>>>>>>>>>>>>>replace fail");
    }
    @Test
    public void testFlushCache() {
        String[] caches = new String[10];
        caches[0] = new String("test");
        isOK = mClient.flushAll();
        System.out.println(isOK ? ">>>>>>>>>>>>>>flush ok" : ">>>>>>>>>>>>>>flush fail");
    }
    @Test
    public void testFlushAllCache() {
        isOK = mClient.flushAll();
        System.out.println(isOK ? ">>>>>>>>>>>>>>flush all ok" : ">>>>>>>>>>>>>>flush all fail");
    }

}

基本使用就是这样,是不是很easy!后续会讲解memcache如何跟spring结合使用!

代码地址: https://files.cnblogs.com/dmc-tec/memcache-demo.rar

    

posted on 2014-08-18 13:14  hi dd  阅读(1412)  评论(0编辑  收藏  举报