RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

java动态缓存技术:WEB缓存应用

来源: 作者: 时间:2007-09-19 点击:

break aa;
}
}
return ms[i];
}
}
}
throw new NoSuchMethodException();
}
}

/** *//**
* 新启线程后台调用给定方法更新缓存中数据据
* @param o
* @param methodName
* @param parameters
* @param key
*/
private void daemonInvoke(Object o, String methodName,Object[] parameters, String key) ...{
if (!threadKeys.contains(key)) ...{
InvokeThread t = new InvokeThread(o, methodName, parameters, key);
t.start();
}
}

/** *//**
* 些类存放方法的主调对像,名称及参数数组
* @author zsy
*
*/
public class MethodInfo ...{
private Object o;
private String methodName;
private Object[] parameters;
public MethodInfo(Object o, String methodName,Object[] parameters) ...{
this.o = o;
this.methodName = methodName;
this.parameters = parameters;
}
public String getMethodName() ...{
return methodName;
}
public void setMethodName(String methodName) ...{
this.methodName = methodName;
}
public Object getO() ...{
return o;
}
public void setO(Object o) ...{
this.o = o;
}
public Object[] getParameters() ...{
return parameters;
}
public void setParameters(Object[] parameters) ...{
this.parameters = parameters;
}

public String toString() ...{
StringBuffer str = new StringBuffer(methodName);
if (parameters != null) ...{
str.append("(");
for (int i = 0; i < parameters.length; i++) ...{
if (parameters[i] instanceof Object[]) ...{
str.append(Arrays.toString((Object[])parameters[i])).append(",");
} else ...{
str.append(parameters[i]).append(",");
}
}
str.append(")");
}
return str.toString();
}
}

/** *//**
* 线程调用方法
* @author zsy
*
*/
private class InvokeThread extends Thread ...{
private Object o;
private String methodName;
private Object[] parameters;
private String key;
public InvokeThread(Object o, String methodName,Object[] parameters, String key) ...{
this.o = o;
this.methodName = methodName;
this.parameters = parameters;
this.key = key;
}

public void run() ...{
threadKeys.add(key);
invoke(o, methodName, parameters, key);
threadKeys.remove(key);
}
}

/** *//**
* 移除缓存中的数据
* @param key
*/
public void removeCacheData(String key) ...{
cacheMap.remove(key);
}

/** *//**
* 移除所有缓存中的数据
*
*/
public void removeAllCacheData() ...{
cacheMap.clear();
}

public String toString() ...{
StringBuffer sb = new StringBuffer("************************ ");
sb.append("正在更新的缓存数据: ");
for (int i = 0; i < threadKeys.size(); i++) ...{
sb.append(threadKeys.get(i)).append(" ");
}
sb.append("当前缓存大小:").append(cacheMap.size()).append(" ");
sb.append("************************");
return sb.toString();
}
}

用法:

例1:代码片段如下:

public class Test {

String rulStr=....;

String encoding=....;

public void getData() {

DataCreator c = new DataCreator();

String result = c.initUrlData(urlStr,encoding);

System.out.println(result);

}

}

  每次执行上面代码时都要通过调用 initUrlData方法取得数据,假设此方法很耗资源而耗时间,但对数据时实性要求不高,就是可以用以下方式进行缓存处理,保证很快地取得数据,并根据设置的参数自动更新缓存中数据

  注意:initUrlData方法参数值一样时才属于同一个缓存,否则会生成一个新的缓存,也就是说从缓存中取数据与initUrlData方法参数值有关

......

public void getData() {

DataCreator data = new DataCreator();

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章