如何在网络场的 Asp.Net WebForms 中使用缓存存储来自数据库的常量?

How to use the cache for store constants from DB in Asp.Net WebForms on the web farm?

我对 Asp.Net Webforms 应用程序中的数据缓存有任何经验。

我有包含四台服务器的网络场。

我有一个 table,其中包含 MSSQL Server 中的常量。

我不想 select 来自数据库的每个 http 请求都包含这些常量,但理想情况是将这些值保存到缓存中并从缓存中获取这些值。

如何在网络场上执行此操作? 执行此操作的最佳方法是什么?

您可以使用 HttpContext.Cache 来存储这些值,有效期很长,或者如果它们 真的 不变(即它们绝对不会改变),那么您可以使用具有 static readonly 属性的 static class 并从数据库中填充这些属性一次。

在这两种情况下,它们都可以在整个应用程序中使用。这种方法在网络场中使用时确实意味着每台服务器都会检索一次值,而不是整个场一次,但除非值的数量达到 10,000,否则我个人不会担心。

如果数据真的永远不会改变,您也可以使用 HttpContext.Current.Application 来存储信息。

根据概述here

Application 不是缓存,它是一个全局命名值集合。如果您将对象添加到 Application,它将一直保留到应用程序域回收为止。

  • 应用程序变量是网络应用程序的所有用户共享的变量
  • 应用程序变量的行为类似于静态变量,它们是静态变量的替代品,因为静态变量在 Web 应用程序中是无状态的
  • 应用程序变量中只应保留共享值,一旦不使用,应明确删除。

Cache :通过在 ApplicationCache [=37] 中缓存频繁请求的对象和数据,可以在 ASP.NET 应用程序中获得显着的性能改进=]是的。虽然 Cache class 确实提供了更多的灵活性和控制,但它似乎仅在增加吞吐量方面提供了边际优势,而不是 Application class 用于缓存。很难开发一种测试方案来准确衡量 Cache class 的潜在优势 - 通过清理过程管理较少使用的对象,而不是事实上应用程序不提供此功能。开发人员需要在这种情况下做出决定,并且应该基于项目的需求和便利性及其使用模式。