我想在 ASP.NET MVC 中缓存对象。我有一个 BaseController
我希望所有 Controller 都继承它。在 BaseController 中,有一个 User
属性,它将简单地从数据库中获取用户数据,以便我可以在 Controller 中使用它,或将其传递给 View 。
我想缓存此信息。我在每个页面上都使用此信息,因此无需每个页面请求都访问数据库。
我想要这样的东西:
if(_user is null)
GrabFromDatabase
StuffIntoCache
return CachedObject as User
如何在 ASP.NET MVC 中实现简单的缓存?
最佳答案
您仍然可以使用缓存(在所有响应之间共享)和 session (每个用户唯一)进行存储。
我喜欢以下“尝试从缓存获取/创建并存储”模式(类似 C# 的伪代码):
public static class CacheExtensions
{
public static T GetOrStore<T>(this Cache cache, string key, Func<T> generator)
{
var result = cache[key];
if(result == null)
{
result = generator();
cache[key] = result;
}
return (T)result;
}
}
你可以像这样使用它:
var user = HttpRuntime
.Cache
.GetOrStore<User>(
$"User{_userId}",
() => Repository.GetUser(_userId));
您可以将此模式应用于 session 、ViewState(呃)或任何其他缓存机制。您还可以扩展 ControllerContext.HttpContext (我认为它是 System.Web.Extensions 中的包装器之一),或者创建一个新类来完成此操作,并留出一些空间来模拟缓存。
关于asp.net-mvc - 如何在 ASP.NET MVC 中缓存对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445050/