Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
web场上的ASP.Net服务器端数据缓存_Asp.net_Wcf_Caching - Fatal编程技术网

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

web场上的ASP.Net服务器端数据缓存,asp.net,wcf,caching,Asp.net,Wcf,Caching,场景: 在web场场景的ASP.Net应用程序的WCF层中实现主数据的内存缓存 数据在首次访问服务层的GetCountryList()方法时被缓存,缓存的到期时间设置为午夜。假设缓存键为“CountryList\u缓存” 所有后续请求都通过缓存的 如果使用主屏幕更新国家/地区列表,则会发出另一个调用以使“国家/地区列表缓存”无效,并将新数据加载到其中 现在,下一个呼叫将接收更新的国家/地区列表 上述步骤在单服务器场景中很简单,因为步骤3只需要对一台服务器进行缓存到期调用。当我们有2个或3个负载平

场景:

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

  • 数据在首次访问服务层的GetCountryList()方法时被缓存,缓存的到期时间设置为午夜。假设缓存键为“CountryList\u缓存”
  • 所有后续请求都通过缓存的
  • 如果使用主屏幕更新国家/地区列表,则会发出另一个调用以使“国家/地区列表缓存”无效,并将新数据加载到其中
  • 现在,下一个呼叫将接收更新的国家/地区列表 上述步骤在单服务器场景中很简单,因为步骤3只需要对一台服务器进行缓存到期调用。当我们有2个或3个负载平衡的web服务器时,复杂性会增加,因为在这种情况下,缓存只在其中一个服务器上更新(通过主屏幕),但必须在所有3个服务器上失效
  • 我们建议的解决方案:

    我们打算有一个外部服务/exe/web页面,它将知道所有负载平衡服务器(通过配置文件)。为了使一个特定的缓存失效,我们将调用这个外部组件,该组件反过来将使所有web服务器上的相应缓存密钥失效,并加载然后缓存最新的数据

    问题:

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

    注:

  • 与进程内/内存内缓存相比,我们不希望使用分布式缓存,因为这会造成明显的性能损失
  • 缓存已使用System.Runtime.Caching实现
  • 我们已经处理了SQL依赖关系,并在单个web服务器的场景中使用了它

  • 在角色缓存和AppFabric缓存中将您的设计与Windows Azure进行比较

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

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

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

    使用缓存通知时,应用程序会检查 定期缓存群集以查看是否有任何新通知 都有。该时间间隔称为轮询时间间隔,每分钟一次 默认情况下为300秒。轮询间隔以秒为单位指定 应用程序配置设置中的秒数。注意,即使 基于通知的失效,超时仍适用于 本地缓存。这使得基于通知的失效具有互补性 基于超时的失效