zoukankan      html  css  js  c++  java
  • [转载红鱼儿]kbmmw 开发点滴:kbmMW缓存机制

    kbmMW提供了稳顾机制,分为服务端的Cache及客户端的Cache。以客户端为例,当客户端发出相同的数据查询请求时,kbmMW会在客户端的Cache中查找,如果找到,则不再向服务器请求数据。

    为了启用一个ClientQuery使用稳存,首先要设置其以下两个属性:

    kbmMWClientQuery.Cached:=True;//打开数据集的稳存

    kbmMWClientQuery.CacheFlags:

    • mwcfDontAge - 缓存的内容不过期,一直在Cache保留
    • mwcfDontGarbageCollect - 缓存的内容不做垃圾回收,效果同mwcfDontAge
    • mwcfDefsOnly - 仅缓存数据集的定义,包括字段定义及参数定义
    • mwcfUpdateOnResolve - 如果数据集被解析(对数据集的修改向服务器做了提交)则缓存内容将用新的数据、字段及参数定义更新,即对数据集进行重新缓存
    • mwcfLeaveOnResolve - 如果数据集被解析(对数据集的修改向服务器做了提交)则从缓存中删除
    • mwcfNoParamsInCacheID - 数据集的参数不做为Cache ID的内容(Cache ID是一个字符串,缓存一个数据集时生成的名称,如果不用参数做为名称的一部分,则数据集用不同的查询参数时,将共用一个缓存内容)
    • mwcfIgnoreCachedParams - 没启用.

    其次,还要对ClientConnectionPool设置:

    kbmMWClientConnectionPool1.EnableCache:=True;
    kbmMWClientConnectionPool1
    .MaxCacheAge:=30;
    kbmMWClientConnectionPool1
    .MaxCacheEntries:=100;
    kbmMWClientConnectionPool1
    .MaxCacheRecordCount:=10000;

    客户端的请求代码:
    
    procedure TForm2.btnLoadData(Sender: TObject);
    begin
      kbmMWClientQuery1.Close;
      kbmmWClientQuery1.Query.Text:='@T1';
      kbmMWClientQuery1.FieldDefs.Update;
      kbmMWClientQuery1.Params.ParamByName('F1').AsInteger:=5;
      kbmMWClientQuery1.Open;
      kbmMWClientQuery2.Close;
      kbmMWClientQuery2.Open;

    end;
    利用dbmonitor查看SQL执行情况,当第二次点击btnLoadData按钮时,dbMonitor中不再有查询SQL被执行。
    
    同样的方法,适用于服务器端。在测试中发现,作为QueryService的Query属性的数据集,不能被缓存,不知什么原因。经向xalion求教,才明白:原来做为QueryService的默认Query,因频发被调用,出于性能考虑,所以不应该缓存,那在服务器端的缓存机制,实际上就是对命名查询(Named Query)数据集的处理,因他的SQL是静态不变的。
  • 相关阅读:
    [kuangbin带你飞]专题十二 基础DP1 E
    hdu 1203 I NEED A OFFER! (01背包)
    hdu 2602 Bone Collector (01背包)
    hdu 4513 吉哥系列故事——完美队形II (manacher)
    hdu 2203 亲和串 (KMP)
    hdu 1686 Oulipo (KMP)
    hdu 1251 统计难题 (字典树)
    hdu 2846 Repository (字典树)
    hdu 1711 Number Sequence (KMP)
    poj 3461 Oulipo(KMP)
  • 原文地址:https://www.cnblogs.com/xalion/p/2719515.html
Copyright © 2011-2022 走看看