建议将值从缓存中的数据库加载到所有应用程序

本文关键字:加载 数据库 应用程序 缓存 | 更新日期: 2023-09-27 18:31:57

我在数据库中有两个值,它们定义了应用程序中太多事物的行为,至少在不久的将来不会改变。创建静态变量并在应用程序Global.asax加载值是最佳决定吗??.

建议将值从缓存中的数据库加载到所有应用程序

一般规则是,当您知道您的值/数据将在一段时间后过期或需要更改时,请使用缓存,否则使用静态变量。我发现了类似的讨论 HttpRuntime.Cache[] vs Application[]
另请查看 ASP.NET 缓存:技术和最佳实践

是的,您可以将它们缓存在静态变量中。但是,如果它们现在不需要更改并且保持不变,为什么不将它们定义为常量或在 web.config 中呢?

我建议创建一个静态类,其中包含您的这些常量设置的属性,该类将在应用程序启动时从数据库中设置其值。

每当我有存储在数据库中的"系统"设置时,我都会做同样的事情。我将它们作为属性保存在静态类中,并一直访问它们。我还对小表(即项目组)的内容使用相同的技术,这些表不经常更改,但为了减少数据库流量而大量使用。我创建只读集合并访问它们,而不是一直访问数据库。

但任何事情都取决于什么最适合你,只要它干净且易于维护。

就个人而言,我为我的 MVC 站点使用依赖注入(ninject 是我更喜欢的)。这允许您将变量定义为 。InSingletonScope,这意味着您不需要在应用程序中闲逛讨厌的静态数据。然后,我在第一次请求时从数据库加载值并将其存储在局部变量中,并且它既漂亮又整洁。

IE我会使用这个:

public class CachedFooProperty : IFooProperty
{
   public CachedFooProperty(IRepository<Foo> fooRepo)
   {
      Foo = fooRepo.GetFoo();
   }
   public Foo Foo{get;private set;}
}

然后像这样绑定它:

Bind<IFooProperty>().To<CachedFooProperty>().InSingletonScope();

这种做事方式的好处是,只需更改绑定即可轻松打开和关闭缓存。您也可以非常轻松地将其更改为基于 web.config 的配置方法,而无需更改使用该设置的每个位置。