【发布时间】:2011-10-22 23:06:26
【问题描述】:
我的业务流程如下:
- 使命令无效
- 从命令中获取数据(数据库操作,稍慢)
Step2 将被许多并发用户访问。
现在,当一个命令无效,并且用户尝试获取数据时,多个数据库查询开始执行,因为执行速度稍慢。
有什么方法可以阻止多次执行查询?
换句话说,问题是:我们是否可以执行命令, 并以同步方式从命令中获取数据?
【问题讨论】:
标签: java caching command websphere
我的业务流程如下:
Step2 将被许多并发用户访问。
现在,当一个命令无效,并且用户尝试获取数据时,多个数据库查询开始执行,因为执行速度稍慢。
有什么方法可以阻止多次执行查询?
换句话说,问题是:我们是否可以执行命令, 并以同步方式从命令中获取数据?
【问题讨论】:
标签: java caching command websphere
如果您使用的是 Dynacache 可缓存命令并且用户的查询是相同的,那么该命令应该在第一次执行后被缓存。
只有第一次执行应该命中数据库,之后应该从缓存中获取数据,直到缓存失效。
我通常将 Dynacache 用作 IBM Websphere Commerce 套件的一部分。 Websphere Commerce 使用预定命令来检查名为 CACHEIVL 的表。 您将设置触发器,当目标表更改时,该触发器会将失效 id 插入 CACHEIVL。
由于您没有预定的 Dynacache 命令,您可以使用 Websphere schedulers 实现特定于您的用例的某些内容,
这是一个使用动态缓存的可缓存命令的example。
【讨论】:
是的,你可以这样做。
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;
}
}
【讨论】: