可以实现不等待,线程自动更新缓存

 Java动态缓存jar包请下载。

源代码:

 CacheData.java 存放缓存数据的Bean

{
        this.time = time;
    }
}

 

CacheOperation.java 缓存处理类

package com.cari.web.cache;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

        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();

    CacheOperation co = CacheOperation.getInstance();

    String str = (String)co.getCacheData(data, "initUrlData",new Object[]{urlStr, encoding},  120000, 100);

    System.out.println(result);

  }

......

getCacheData方法返回值与initUrlData方法返回类型一样,参数说明:

data:调用initUrlData方法的实列,如果该方法是静态的,则传类的类型,如(DataCreator .class);

"initUrlData":方法名称;

new Object[]{urlStr, encoding}:initUrlData方法的参数数组,如果某一参数为空则传该参数的类型,若encoding 为空,则为new Object[]{urlStr, String.class}或new Object[]{urlStr, ""};

120000:缓存时间,单位:豪秒,即过两分钟更新一次缓存;值为0时为不限,即不更新缓存;

100:访问次数,当缓存中数据被访问100次时更新一次缓存;值为0时为不限,即不更新缓存;

例2:代码片段如下:

......

String province = request.getParameter("province");

String city= request.getParameter("city");

String county= request.getParameter("county");

Document doc = XMLBuilder.buildLatelyKeyword(kwm.latelyKeyword(province, city, county));

out.write(doc);

......

做缓存并两分钟更新一次,如下:

......

String province = request.getParameter("province");

String city= request.getParameter("city");

String county= request.getParameter("county");

CacheOperation co = CacheOperation.getInstance();

MethodInfo mi = co.new MethodInfo(kwm, "latelyKeyword", new Object[]{province, city, county});
  
Document doc = (Document )co.getCacheData(XMLBuilder.class,"buildLatelyKeyword",new Object[]{mi}, 120000, 0);

out.write(doc);

......

以上方法是嵌套调用, 要先定义内部方法说明即MethodInfo,此类是CacheOperation 的一个内部类。

说明的不是很清楚,具体实现过程看源程序。。

 

 

 

转自:http://blog.csdn.net/tfy1332/article/details/8741171

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-05-28
  • 2021-12-17
  • 2021-12-07
  • 2022-02-20
  • 2021-08-06
猜你喜欢
  • 2022-03-04
  • 2022-12-23
  • 2022-01-22
  • 2021-12-22
  • 2021-11-22
  • 2021-06-03
相关资源
相似解决方案