IBM Websphere 命令缓存失效

发布于 2024-11-28 11:37:32 字数 247 浏览 3 评论 0原文

我的业务流程如下:

  1. 使命令无效
  2. 从命令中获取数据(数据库操作,慢一点)

Step2 将被许多并发用户访问。

现在,当命令无效并且用户尝试获取数据时,多个数据库查询开始执行,因为执行速度稍慢。

有什么办法可以阻止多次执行查询吗?

换句话来说,问题是:我们能否执行命令, 并从命令中同步获取数据?

My business flow is following:

  1. Invalidate a command
  2. Fetch data from command (database operations, little slower)

Step2 would be access by many concurrent users.

Now, when a command in invalidated, and user tries to fetch the data, multiple database queries starts executing because execute is little slower.

Is there any way to stop this multiple executions of queries?

In other words, the question is: Can we make the execution of command,
and fetching data from command as Synchronized?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绝不放开 2024-12-05 11:37:32

是的,你可以做这样的事情。

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;
  }
}

Yes, you can do something like this.

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;
  }
}
初相遇 2024-12-05 11:37:32

如果您使用 Dynacache 可缓存命令并且查询对于用户而言相同,则该命令应在首次执行后缓存。

只有第一次执行才应该访问数据库,之后应该从缓存中获取数据,直到缓存失效。

我通常使用 Dynacache 作为 IBM Websphere Commerce 套件的一部分。
Websphere Commerce 使用计划命令来检查名为 CACHEIVL 的表。
您可以设置触发器,当目标表发生更改时,该触发器会将失效 ID 插入到 CACHEIVL 中。

由于您没有计划的 Dynacache 命令,因此您可以使用 Websphere 调度程序 实现特定于您的用例的某些内容,

以下是使用 Dynacache 的可缓存命令的示例

If you are using a Dynacache cacheable command and the queries are the same for users, then the command should get cached after the first execution.

Only the first execution should hit the database, after that the data should be fetched from cache until the cache is invalidated.

I usually use Dynacache as part of IBM Websphere Commerce suite.
Websphere Commerce uses a scheduled command to check a table called CACHEIVL.
You would setup triggers which would insert an invalidation id into CACHEIVL when the target table is changed.

Since you don't have the scheduled Dynacache command you can implement something specific to your use case using Websphere schedulers,

Here is an example of a cacheable command using Dynacache.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文