Memcache开发实例代码

我们在项目开发中使用memcache一般是服务器端和客户端。服务器端主要是安装memcache的安装文件,分windows和linux版本的,安装好运行即可。客户端主要是在代码中去实现memcache的存取和取值。
在这里我们开发的主要是关心客户端的使用,主要代码如下:
1、首先要建立一个管理memcache的类 
package com.alisoft.sme.memcached;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

public class MemCachedManager {

// 创建全局的唯一实例
protected static MemCachedClient mcc = new MemCachedClient();

protected static MemCachedManager memCachedManager = new MemCachedManager();

// 设置与缓存服务器的连接池
static {
// 服务器列表和其权重
String[] servers = { "127.0.0.1:11211" };
Integer[] weights = { 3 };

// 获取socke连接池的实例对象
SockIOPool pool = SockIOPool.getInstance();

// 设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);

// 设置初始连接数、最小和最大连接数以及最大处理时间
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
                   //这里我们可以设置最大处理时间是12小时,这个根据项目需要来设置
pool.setMaxIdle(1000 * 60 * 60 * 12);

// 设置主线程的睡眠时间
pool.setMaintSleep(30);

// 设置TCP的参数,连接超时等
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);

// 初始化连接池
pool.initialize();

// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);
}

/**
* 保护型构造方法,不允许实例化!
*
*/
protected MemCachedManager() {

}

/**
* 获取唯一实例.
*
* @return
*/
public static MemCachedManager getInstance() {
return memCachedManager;
}

/**
* 添加一个指定的值到缓存中.
*
* @param key
* @param value
* @return
*/
public boolean add(String key, Object value) {
return mcc.add(key, value);
}

public boolean add(String key, Object value, Date expiry) {
return mcc.add(key, value, expiry);
}

public boolean replace(String key, Object value) {
return mcc.replace(key, value);
}

public boolean replace(String key, Object value, Date expiry) {
return mcc.replace(key, value, expiry);
}

/**
* 根据指定的关键字获取对象.
*
* @param key
* @return
*/
public Object get(String key) {
return mcc.get(key);
}

public static void main(String[] args) {
MemCachedManager cache = MemCachedManager.getInstance();
cache.add("username", "lebron");
System.out.print("get value : " + cache.get("username"));
}
}


2、建立缓存数据的pojo,这里一定要是可序列化,这是memcache底层缓存技术实现的原因
package com.alisoft.sme.memcached;

import java.io.Serializable;

public class TBean implements Serializable {
//随机生成的序列号
private static final long serialVersionUID = 1945562032261336919L;

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

3、代码测试
</SPAN></SPAN>
<PRE class=java name="code">&nbsp;</PRE>
</H1>
<H2 style="MARGIN: 13pt 0cm 13pt 28.8pt"><SPAN lang=EN-US><SPAN><SPAN>&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN><SPAN style="FONT-SIZE: large">创建测试用例</SPAN></SPAN></H2>
<H2 style="MARGIN: 13pt 0cm 13pt 28.8pt">&nbsp;</H2>
<PRE class=java name="code">package com.alisoft.sme.memcached.test;

import junit.framework.TestCase;

import org.junit.Test;

import com.alisoft.sme.memcached.MemCachedManager;
import com.alisoft.sme.memcached.TBean;

public class TestMemcached extends TestCase {

private static MemCachedManager cache;

@Test
public void testCache() {

TBean tb = new TBean();
tb.setName("章黎");
cache.add("bean", tb);

TBean tb1 = (TBean) cache.get("bean");
System.out.println("name=" + tb1.getName());
tb1.setName("勒布朗");

tb1 = (TBean) cache.get("bean");
System.out.println("name=" + tb1.getName());
}

@Override
protected void setUp() throws Exception {
super.setUp();
cache = MemCachedManager.getInstance();
}

@Override
protected void tearDown() throws Exception {
super.tearDown();
cache = null;
}

}
</PRE>
<H2 style="MARGIN: 13pt 0cm 13pt 28.8pt">&nbsp;<SPAN>测试结果</SPAN></H2>
<H2 style="MARGIN: 13pt 0cm 13pt 28.8pt"><SPAN>
<PRE class=java name="code">[INFO] ++++ serializing for key: bean for class: com.alisoft.sme.memcached.TBean
[INFO] ++++ memcache cmd (result code): add bean 8 0 93 (NOT_STORED)
[INFO] ++++ data not stored in cache for key: bean
[INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean
name=章黎[INFO] ++++ deserializing class com.alisoft.sme.memcached.TBean
name=章黎</PRE>
&nbsp;</SPAN></H2>
这里实现起来还是很简单的,在项目中,我们大概的做法就是:第一次请求是去数据库中找,返回数据时同时将数据缓存到memcache中,以后每次都是先到memcache中去取数据,如果memcache中没有数据,我们再到数据库中去拿数据,拿到后再放到memcache中。
     

猜你喜欢

转载自zhli986-yahoo-cn.iteye.com/blog/1119477