【问题标题】:Will this be global for the whole site?这将是整个网站的全球性吗?
【发布时间】:2013-02-25 18:00:41
【问题描述】:

我需要将一个 xml 文件加载到内存中,并使其可用于整个站点的全局。这段代码能做到这一点吗?

如果是这样,将来如何更新这个“缓存”版本?

XPathDocument ConvProductDoc;

    ConvProductDoc = Cache["doc"] as XPathDocument;
    if (ConvProductDoc == null) {
        ConvProductDoc = new XPathDocument(HttpContext.Current.Request.MapPath(@"\data\foo\bar\my.xml"));
        Cache.Insert("doc", ConvProductDoc);
    }

【问题讨论】:

  • 取决于Cache 是什么以及您的站点是如何配置的。
  • 好的,请原谅我的无知,是否有链接可以进一步解释您的建议?

标签: c# asp.net xpath xml-parsing


【解决方案1】:

是的,ASP.NET Cache 对象是站点范围的。管理Cache和设置过期规则等有很多选项。

要分配/更新Cache 中的值,您只需像设置任何DictionaryHashTable 值一样设置它:

Cache["doc"] = newValue;

您可以在此处的 MSDN 文档中阅读更多关于 Cache 对象的信息:http://msdn.microsoft.com/en-us/library/aa478965.aspx#aspnet-cachingtechniquesbestpract_topic4

【讨论】:

  • @SoftwareSpint 在下面对分布在多个服务器上的站点提出了一个很好的观点,但是 ASP.NET 具有用于管理跨多个服务器的缓存的内置机制。这篇文章可能会有所帮助:msdn.microsoft.com/en-us/magazine/dd942840.aspx
  • 新文件检测呢?我确定这是可能的,对吧?
  • 是的,您当然可以使用 FileSystemWatcher 来监控文件,但是这将是您必须使用的单独操作 - 您将监控文件,然后手动更新Cache 基于对文件的更改。而且您需要考虑文件的位置 - 在其中一台服务器上,还是在其中任何一台服务器上?你可以阅读更多关于FileSystemWatcherhere
  • 实际上没有,缓存对象是每个池的,如果您使用两个池在同一台计算机上运行您的站点,那么您有 2 个不同的缓存对象。
  • @BrianS 是的,如果您搜索网络花园,您会看到。在网络花园和网络农场的情况下,只有文件系统(和/或公共数据库)在应用程序之间可以是真实的。
【解决方案2】:

如果您的网站仅在一台服务器上,那么可以。

如果您的网站分布在多台服务器上,则不会。 缓存键和数据仅在存储它的服务器上可用。

例如,如果您的服务器位于 Amazon EC2 中,您可以使用 ElastiCache,这将确保缓存在分布式服务器环境中可用。

【讨论】:

  • 明白了,是的,这是有道理的,而且,对我来说,这是给定的。这样就好了。所以简短的回答是“是的,仅在该服务器上”?我认为我在六台服务器之间进行了负载平衡(该页面每天获得 5k 次点击)。
  • 正确的是“在一个池上”而不是在一台服务器上,因为如果您有网络花园(运行更多池),那么每个池都有自己的缓存。
猜你喜欢
  • 2011-03-26
  • 2019-03-08
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多