为了提高系统的性能,计划在系统中缓存很多的动态对象。于是我就找到了OSCache。OSCache 是一个开源的项目,它提供一套缓存解决方案,可以动态缓存JSP内容、Servlet响应、任意对象。
使用之前想测试一下它的性能如何?由于只想使用OSCache缓存对象的功能,因此先对OSCache缓存对象的的性能做了一个简单的测试。
测试方法
1,在cache中存放了20万个简单的Form对象。
2,从cache中取出任意2000个对象。
3,从cache中移除任意2000个对象。
测试环境
硬件:CPU PM1.86GHZ / Memory 1024M
软件:windowXP / JDK1.5.0_12
测试结果
1,装载Form对象的时间相对教长,耗时2485ms。
2,从cache中获取2000个对象耗时141ms。
3,从cache中移除2000个对象耗时0ms。
源代码
package oscache.test;
import java.util.Vector;
import org.apache.commons.lang.RandomStringUtils;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;
/**
* OSCache 性能测试
* @author kevin
*
*/
public class OsCachePerformanceTest {
GeneralCacheAdministrator cache = new GeneralCacheAdministrator();
Vector keys = new Vector();
public void load(){
int LEN = 200*000;
for(int i=0;i<LEN;i++){
DataForm form = new DataForm();
form.setKey(RandomStringUtils.randomAlphanumeric(20));
form.setName(i + "kkkk");
cache.putInCache(form.getKey(), form);
if(i%100 == 0){
keys.add(form.getKey());
}
}
}
public void testFetchTime(){
long beginTime = System.currentTimeMillis();
for(int i=0;i<keys.size();i++){
long startTime = System.currentTimeMillis();
String key = (String)keys.get(i);
DataForm form = null;
try{
form = (DataForm)cache.getFromCache(key);
}catch(Exception e){
}
System.out.println("**" + i + ":" + (System.currentTimeMillis() - startTime)
+ "," + form.getName());
}
System.out.println("serachSumTime=" + (System.currentTimeMillis() - beginTime));
beginTime = System.currentTimeMillis();
for(int i=0;i<keys.size();i++){
String key = (String)keys.get(i);
try{
cache.removeEntry(key);
}catch(Exception e){
}
}
System.out.println("removeSumTime=" + (System.currentTimeMillis() - beginTime));
}
public static void main(String[] args){
long beginTime = System.currentTimeMillis();
OsCachePerformanceTest dataLoad = new OsCachePerformanceTest();
dataLoad.load();
dataLoad.testFetchTime();
System.out.println("sumTime=" + (System.currentTimeMillis() - beginTime));
}
}
package oscache.test;
/**
* form对象
* @author kevin
*
*/
public class DataForm {
private String name = "";
private String value = "";
private String key = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}