建议将值从缓存中的数据库加载到所有应用程序
本文关键字:加载 数据库 应用程序 缓存 | 更新日期: 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 的配置方法,而无需更改使用该设置的每个位置。