繁体   English   中英

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

[英]ASP.Net server side data caching on a web farm

场景:

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

  1. 第一次访问服务层的数据(例如,GetCountryList()方法,并且缓存的过期时间设置为午夜)时,将缓存数据。 假设缓存键为“ CountryList_Cache”
  2. 所有后续请求均通过缓存服务”
  3. 如果使用主屏幕更新了“国家/地区”列表,则会进行另一个调用以使“ CountryList_Cache”无效,并将新数据加载到其中
  4. 现在,下一个呼叫将接收更新的国家/地区列表。在单服务器场景中,上述步骤很容易,因为步骤3仅需要对一个服务器的缓存到期调用。 当我们有2或3个负载平衡的Web服务器时,复杂性会增加,因为在那种情况下,仅在其中一台服务器上(通过主屏幕)更新缓存,但是必须在所有3台服务器上使缓存无效。

我们提出的解决方案:

我们打算有一个外部服务/ exe /网页,该网页将了解所有负载平衡的服务器(通过配置文件)。 为了使特定的缓存无效,我们将调用此外部组件,从而使所有Web服务器上的相应缓存密钥无效,然后加载最新数据并进行缓存。

问题:

尽管上述方法对我们有用,但对于企业级LOB应用程序,我们认为这不是干净的方法。 是否有更好/更清洁的方法来实现多台服务器上的缓存过期?

注意:

  1. 与进程内/内存内缓存相比,由于明显的性能损失,我们不希望使用分布式缓存
  2. 缓存已使用System.Runtime.Caching实现
  3. 我们已经处理了SQL依赖关系,并将其用于单个Web服务器的方案中

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

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

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

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

基于通知的无效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM