使用AppFabric本地缓存和服务器缓存的混合

时间:2012-10-18 20:22:27

标签: caching memory appfabric

我刚刚开始使用AppFabric ......

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

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

是否有人知道是否可以指示某些项目进入本地缓存而其他项目进入服务器?所有数据都适合内存。在查看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​​ /标志/参数?或者,可能通过使用区域/标签来处理?

谢谢!

1 个答案:

答案 0 :(得分:2)

假设您正在使用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实例。