【问题标题】:Using a mix of AppFabric local cache and server cache混合使用 AppFabric 本地缓存和服务器缓存
【发布时间】:2012-10-18 20:22:27
【问题描述】:

我刚刚开始使用 AppFabric...

我的应用程序是在医疗保健领域 - 我们有大约 15000 名系统用户,他们会大量访问患者信息(例如,想象一个护士/医生团队在患者住院时访问患者)。

我想做的是在内存中缓存某些项目(例如患者人口统计信息) 和缓存主机服务器上的其他项目(例如实验室、药物、诊断成像、报告)。底层数据来自各种第 3 方系统,其中一些系统返回数据的速度极慢。

有谁知道是否可以指示某些项目进入本地缓存而其他项目进入服务器?有太多数据无法全部放入内存。在查看 MSDN 文档时,这里是一个示例配置文件。

   <dataCacheClient requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1">
      <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/>
      <clientNotification pollInterval="300" maxQueueLength="10000"/>
      <hosts>
         <host name="CacheServer1" cachePort="22233"/>
         <host name="CacheServer2" cachePort="22233"/>
      </hosts>
      <securityProperties mode="Transport" protectionLevel="EncryptAndSign" />
      <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456" 
                           maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000" 
                           receiveTimeout="600000"/>
   </dataCacheClient>

好像为整个缓存客户端启用本地缓存?

为了支持我描述的场景,这是否意味着我必须创建两个缓存客户端并且我的代码必须知道/知道将数据放入哪个缓存客户端?或者在将数据存储到缓存中时是否可以使用 API/标志/参数?或者也许,通过使用区域/标签来处理?

谢谢!

【问题讨论】:

    标签: caching memory appfabric


    【解决方案1】:

    假设您使用的是 AppFabric 1.1,you can configure multiple dataCacheClient nodes 具有不同的配置。因此,使用您现有的示例,您可以执行以下操作:

    <!-- local caching client -->
    <dataCacheClient name="LocalCaching" requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1">
      <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/>
      <clientNotification pollInterval="300" maxQueueLength="10000"/>
      <hosts>
         <host name="CacheServer1" cachePort="22233"/>
         <host name="CacheServer2" cachePort="22233"/>
      </hosts>
      <securityProperties mode="Transport" protectionLevel="EncryptAndSign" />
      <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456" 
                           maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000" 
                           receiveTimeout="600000"/>
    

    然后从代码中你有不同的DataCacheFactoryConfigurations 使用带有名称的构造函数而不是只使用默认值:

    DataCacheFactoryConfiguration localCachingFactoryConfig = new DataCacheFactoryConfiguration("LocalCaching");
    
    DataCacheFactoryConfiguration remoteOnlyCachingFactoryConfig = new DataCacheFactoryConfiguration("RemoteOnlyCaching");
    

    然后,您只需根据您正在处理的数据所需的缓存类型,在代码中从适当的工厂创建您的 DataCache 实例。

    【讨论】:

    • 谢谢,这就是我想要的。愚蠢的我,我的公司在 v1.0 上并没有意识到这一点。
    • 如果我被困在 v1.0 上,是否有办法让这个多客户端工作?
    • 不幸的是,在 1.0 中没有基于配置的方法来解决这个问题。但是,通过以编程方式自己配置 DataCacheFactoryConfiguration 实例,它完全可以在纯代码中实现。您只需编写自己的配置条目来存储不同的属性。
    • 我刚刚升级到 AppFabric 1.1——按照说明,我得到了 System.MethodAccessException。有什么想法吗?
    • 听起来你有一些二进制文件在某处不同步。我假设这是在您的客户中?您如何引用客户端库?它们不再在 1.1 IIRC 的 GAC 中,我建议使用 ServerAppFabric.Client NuGet 包。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多