【问题标题】:Extending ObjectCache to create a file-based cache alternative扩展 ObjectCache 以创建基于文件的缓存替代方案
【发布时间】:2012-01-08 13:07:22
【问题描述】:

我们正在为一系列澳大利亚假日公园开发 ASP.Net MVC/Jquery 移动项目。大部分公园相关数据存储在 SQL 数据库中。

目前正在开发的部分之一是“当地景点”。此部分的数据来自澳大利亚旅游数据仓库 (ATDW) 拥有的 Web 服务。尽管加载视图最多可能需要 45 秒,但幸运的是,数据是相当静态的。我们计划缓存它,并每周刷新一次。这个数据也比较大。我认为它不适合内存缓存。

我对 System.Runtime.ObjectCache 的基于文件的实现感兴趣。

我已经搜索了互联网,但我没有找到任何这样的例子。我的问题很笼统,我正在寻找有关读取/写入基于文件的缓存的建议。数据将由直接从控制器调用的服务层中的类 CachedLocalAttractionsService.cs 检索。

请提供以下建议: 在磁盘上存储名称/值对, 以 Cache[key] 方式序列化大量可检索的数据, 到目前为止,我在 6 小时的搜索中可能遗漏的任何示例。

【问题讨论】:

  • 虽然我热衷于创建 ObjectCache 的自定义实现,但我最终走上了一条不同的道路。我没有依赖 FileCache,而是将大部分存储逻辑移到了服务中,并放弃了 ObjectCache 带来的优势,即失效策略。我使用协议缓冲区 dll 对硬盘进行序列化,并且缓存键被滚动到文件名中,而不是检查缓存,即如果 cache[key] != null,而是检查磁盘,即 if (( str = FileCache.Read(key)) != null)

标签: asp.net caching c#-4.0 file-io


【解决方案1】:

文件系统缓存/搜索的最佳选择可能是使用 Lucene 索引。

但是,如果您的内容是相当静态的,那么您可能不考虑使用输出缓存吗?

简单的例子

[OutputCache(Duration=10, VaryByParam="none")]
public ActionResult Index()
{
    return View();
}

这会将这个返回缓存 10 秒。

在这里查看http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs

【讨论】:

  • 感谢您的快速回复。我们看到输出缓存的不足之处在于,用户偶尔会不得不忍受数据被拉取和输出缓存刷新时的延迟。我们希望将信息缓存到文件系统,设置到期时间,然后创建一个幕后进程,通过创建 Web 服务入口点每周加载此缓存,并在数小时内使用它来刷新缓存
猜你喜欢
  • 2011-12-15
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
相关资源
最近更新 更多