繁体   English   中英

在网络花园/农场中共享静态课程数据

[英]Sharing static classes data accross web garden/farm

场景:

  • ASP.NET网站
  • 包含TONS配置数据的全局静态类
  • 静态数据大部分是只读的,但有时可能会每隔一次更改一次
  • 静态类中的数据必须始终实时

现在,这在单个工作进程中确实非常有效,所有配置数据始终都在内存中(仅在对数据进行修改时才将更改写入磁盘),并且由于它使用了很多,因此可以加速应用程序数量级(与将其存储在数据库中并针对每个请求进行查询相比)

您将如何转换此应用程序以便可以在网络花园甚至网络农场环境中使用?

我正在寻找的是实时同步机制

显然,问题在于每个工作人员将拥有自己的静态类数据副本; 我对采用的方法有一些想法,但是想看看人们还有什么其他想法

您可以在文件系统上的共享文件上检查日期。 每次更改配置数据时,只需触摸文件即可更改修改日期。 将程序上次加载数据的日期与文件的日期进行比较。 如果文件的日期较新,请重新加载数据并更新您的LastLoaded日期。

它重量轻,可让您轻松触发数据重新加载。 只要文件有一段时间没有变化,操作系统无论如何都应该在ram中包含大部分文件元数据。

尽管我还没有进行性能比较,但是我一直发现这种方法是将“重新加载缓存”消息传递给所有客户端的一种强大且易于实现的方法。

DateTime cacheDate = DateTime.Now.AddHours(-1);
DateTime fileDate = System.IO.File.GetLastWriteTime(@"C:\cachefile.txt");
if(fileDate > cacheDate)
{
    //Reload cache
    cacheDate = DateTime.Now;
}
//Get Cached Data

您还可以使用HttpContext缓存。

Context.Cache.Add(key, val, 
    new System.Web.Caching.CacheDependency(@"C:\cachefile.txt"),  
    System.Web.Caching.Cache.NoAbsoluteExpiration, 
    System.Web.Caching.Cache.NoSlidingExpiration, 
    System.Web.Caching.CacheItemPriority.Default, 
    null/* or your Callback for loading the cache.*/);

我以前没有以这种方式使用过它,所以我对它的工作原理并不了解。

暂无
暂无

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

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