【问题标题】:IBM Websphere Command Cache InvalidationIBM Websphere 命令缓存失效
【发布时间】:2011-10-22 23:06:26
【问题描述】:

我的业务流程如下:

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

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

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

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

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

【问题讨论】:

    标签: java caching command websphere


    【解决方案1】:

    如果您使用的是 Dynacache 可缓存命令并且用户的查询是相同的,那么该命令应该在第一次执行后被缓存。

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

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

    由于您没有预定的 Dynacache 命令,您可以使用 Websphere schedulers 实现特定于您的用例的某些内容,

    这是一个使用动态缓存的可缓存命令的example

    【讨论】:

      【解决方案2】:

      是的,你可以这样做。

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

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 2018-12-28
        • 2015-04-29
        相关资源
        最近更新 更多