2012-04-25 42 views
0

我已經設置了kbmMWUNIDACConnectionPool屬性,這在服務器端:如何使用KbmMW的緩存功能?

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

但是,我發現緩存功能得不到有效,請看看Unidac監控截圖:

enter image description here

這是相同的查詢語句,但服務器端每次都要問數據庫!爲什麼? 總之:如何正確使用緩存功能? 在此先感謝! :)

回答

4

您需要啓用查詢語句應該被緩存(xxxquery組件的緩存屬性)以及它應該如何緩存(CacheFlags在同一個組件上)。

CacheFlags可以

  • mwcfDontAge - 緩存條目都不會過期,將留在緩存
  • mwcfDontGarbageCollect - 緩存條目將永遠不會被垃圾收集(效果類似於不要歲)
  • mwcfDefsOnly - 只有查詢定義(fielddefs和參數定義)纔會被緩存。
  • mwcfUpdateOnResolve - 如果已解決,緩存條目將使用新數據和字段/ paramdefs進行更新。
  • mwcfLeaveOnResolve - 如果已解決,緩存條目將被刪除。
  • mwcfNoParamsInCacheID - 不要存儲參數內容作爲緩存ID的一部分(因此不同的parameterValues導致相同的高速緩存條目)
  • mwcfIgnoreCachedParams - 不可使用。
+0

謝謝! @KimMadsen,我應該同時設置客戶端組件的任何屬性? – 2012-04-26 01:43:23

+0

按照你的建議,客戶端現在沒有問題!謝謝!但是服務器端仍然沒有任何作用:( – 2012-04-26 08:45:07

+0

你在服務器上有相同的選項 客戶端有一個指向應用服務器的連接池,它可以緩存這些值。數據庫,如果你啓用了緩存,設置相關的緩存屬性,並在查詢組件(客戶端和服務器端)上定義它們應該被緩存,它會這樣做,記住要緩存一些東西,它首先必須完成整個操作。只有稍後的請求才能從緩存中受益。 – 2012-04-26 13:32:41