首页 > 代码库 > memcached使用详解

memcached使用详解

    最近为了解决系统性能问题,研究了一下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结合使用!

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