Delphi 如何使用KbmMW的缓存功能?

Delphi 如何使用KbmMW的缓存功能?,delphi,sockets,indy,3-tier,Delphi,Sockets,Indy,3 Tier,我已在服务器端将kbmMWUNIDACConnectionPool属性设置为: kbmMWUNIDACConnectionPool1.EnableCache := True; kbmMWUNIDACConnectionPool1.MaxCacheAge := 30; kbmMWUNIDACConnectionPool1.MaxCacheEntries := 100; kbmMWUNIDACConnectionPool1.MaxCacheRecordCount := 10000; 但是,我发现缓

我已在服务器端将kbmMWUNIDACConnectionPool属性设置为:

kbmMWUNIDACConnectionPool1.EnableCache := True;
kbmMWUNIDACConnectionPool1.MaxCacheAge := 30;
kbmMWUNIDACConnectionPool1.MaxCacheEntries := 100;
kbmMWUNIDACConnectionPool1.MaxCacheRecordCount := 10000;
但是,我发现缓存功能无效,请查看Unidac监视器屏幕截图:

这是相同的查询语句,但服务器端每次都会询问数据库!为什么? 一句话:如何正确使用缓存功能?
提前感谢!:)

您需要启用应该缓存查询语句(xxxquery组件的cached属性)以及应该如何缓存它(同一组件上的CacheFlags)

缓存标志可以是

  • mwcfDontAge-缓存项不会过期,将保留在缓存中
  • mwcfDontGarbageCollect-缓存项将永远不会被垃圾收集(效果类似于dont age)
  • mwcfDefsOnly-仅缓存查询的定义(字段定义和参数定义)
  • mwcfUpdateOnResolve-如果已解析,缓存条目将使用新数据和字段/paramdefs更新
  • MWCFleeveOnResolve-如果已解决,缓存项将被删除
  • mwcfNoParamsInCacheID-不要将参数内容存储为缓存ID的一部分(因此不同的ParameterValue会导致相同的缓存条目)
  • MWCSignoreCachedParams-未使用

您需要启用查询语句的缓存(xxxquery组件的cached属性)和缓存方式(同一组件上的CacheFlags)

缓存标志可以是

  • mwcfDontAge-缓存项不会过期,将保留在缓存中
  • mwcfDontGarbageCollect-缓存项将永远不会被垃圾收集(效果类似于dont age)
  • mwcfDefsOnly-仅缓存查询的定义(字段定义和参数定义)
  • mwcfUpdateOnResolve-如果已解析,缓存条目将使用新数据和字段/paramdefs更新
  • MWCFleeveOnResolve-如果已解决,缓存项将被删除
  • mwcfNoParamsInCacheID-不要将参数内容存储为缓存ID的一部分(因此不同的ParameterValue会导致相同的缓存条目)
  • MWCSignoreCachedParams-未使用

谢谢@KimMadsen,我应该同时设置客户端组件的任何属性吗?按照你的建议,客户端现在没有问题了!谢谢但是服务器端仍然没有任何效果:(您在服务器上有相同的选项。客户端有一个指向应用程序服务器的连接池。它可以缓存这些值。应用程序服务器对数据库有相同的缓存。如果您对这些值启用缓存,请设置相关缓存属性并在查询组件(客户端和服务器端)上定义)他们应该操作缓存,这就可以了。记住缓存一些东西,它首先要做完整的操作。只有以后的请求才能从缓存中受益。谢谢!@KimMadsen,我应该同时设置客户端组件的任何属性吗?按照你的建议,客户端现在没有问题了!谢谢!但是服务er端仍然没有任何效果:(您在服务器上有相同的选项。客户端有一个指向应用程序服务器的连接池。它可以缓存这些值。应用程序服务器对数据库的缓存相同。如果您在这些上启用缓存,请设置相关缓存属性并在查询组件(客户端和服务器端)上定义)他们应该操作缓存,它会这样做。记住缓存某些东西,它首先必须执行完整的操作。只有以后的请求才能从缓存中受益。