Web服务器场上的ASP.Net服务器端数据缓存

时间:2013-11-28 05:01:25

标签: asp.net wcf caching

情景:

在Web场方案的ASP.Net应用程序的WCF层中实现主数据的内存中缓存

  1. 数据在首次访问服务层时缓存,比如GetCountryList()方法,缓存'到期时间设置为午夜。假设缓存键是“CountryList_Cache”
  2. 所有后续请求均通过缓存“
  3. 提供
  4. 如果使用主屏幕更新国家/地区列表,则会进行额外调用以使“CountryList_Cache”无效并将新数据加载到其中
  5. 下一个电话现在会收到更新的国家/地区列表 上述步骤在单个服务器方案中很容易,因为步骤3仅需要对一个服务器进行缓存到期调用。当我们有2个或3个负载均衡的Web服务器时,复杂性会增加,因为在这种情况下,缓存只在一个服务器上更新(通过主屏幕),但必须在所有3个服务器上无效。
  6. 我们提出的解决方案:

    我们打算有一个外部服务/ exe /网页,它可以了解所有负载均衡的服务器(通过配置文件)。为了使特定缓存无效,我们将调用此外部组件,这反过来会使所有Web服务器上的相应缓存密钥无效,然后使用最新数据加载缓存。

    问题:

    虽然上述方法对我们有用,但我们认为它不是企业级LOB应用程序的干净方法。是否有更好/更清晰的方法来实现跨多个服务器的缓存过期?

    注意:

    1. 与进程内/内存缓存相比,由于明显的性能损失,我们不想使用分布式缓存
    2. 使用System.Runtime.Caching
    3. 实现了缓存
    4. 我们使用过SQL依赖,并在单个Web服务器的场景中使用它

1 个答案:

答案 0 :(得分:1)

将您的设计与Windows Azure角色内缓存和AppFabric缓存进行比较。

在这些产品中,缓存存储在一个或多个服务器(缓存集群)中。为了加快请求速度,他们创建了Local Cache

  

启用本地缓存后,缓存客户端会存储对该引用的引用   对象本地。此本地引用可使对象保持活动状态   客户端应用程序的内存。当应用程序请求时   对象,缓存客户端检查对象是否驻留在   本地缓存。如果是,则返回对该对象的引用   立即不联系服务器。如果它不存在,那么   从服务器检索对象。然后缓存客户端   反序列化对象并将引用存储到新的对象中   检索到的本地缓存中的对象。客户端应用程序使用它   相同的对象。

本地缓存可能因超时和/或通知而失效

Notification-based Invalidation

  

当您使用缓存通知时,您的应用程序会检查   定期缓存群集以查看是否有任何新通知   可用。这个间隔称为轮询间隔,是每个   默认为300秒。轮询间隔以单位为单位指定   应用程序配置设置中的秒数。请注意,即使有   基于通知的失效,超时仍然适用于   本地缓存。这使得基于通知的失效互补   基于超时的失效。