我的业务流程如下:
Step2将被许多并发用户访问。
现在,当一个命令失效,用户试图获取数据时,多个数据库查询就会开始执行,因为执行速度稍微慢一些。
有什么方法可以停止多次执行查询吗?
换句话说,问题是:我们能否使命令的执行和从命令中获取数据作为同步?
发布于 2011-09-17 21:56:56
是的,你可以这样做。
public class Fetcher {
private static String data;
private long timestamp;
public synchronized String fetchData() {
String result="";
if (data!=null) {
result=data;
// let's invalidate too old data
if (new Date().getTime()-timestamp> 100000)
data=null;
} else {
DAO db = DAO.getConnection();
data = db.performQuery();
result=data;
}
return result;
}
}发布于 2012-02-09 06:17:05
如果您使用的是Dynacache缓存命令,并且用户的查询是相同的,那么该命令应该在第一次执行之后被缓存。
只有第一次执行才能命中数据库,然后从缓存中提取数据,直到缓存失效。
我通常使用Dynacache作为套件的一部分。Websphere使用一个预定命令来检查一个名为CACHEIVL的表。您将设置触发器,当目标表被更改时,这些触发器将向CACHEIVL中插入一个无效id。
由于您没有计划好的Dynacache命令,所以可以使用Websphere调度程序实现特定于您的用例的东西,
下面是一个使用Dynacache的可缓存命令的示例。
https://stackoverflow.com/questions/6992231
复制相似问题