[英]ASP.Net MVC Session Cache
我希望通过使用一些缓存之王来提高性能。 例如,用户登录并访问约会系统,我想缓存此数据,从缓存中查询此数据,然后在添加新约会时更新缓存
例如,我写这篇文章,但我认为这是应用程序缓存而不是会话(不希望其他用户看到其他人的数据)
public IEnumerable<ScheduledItem> GetCache(bool reload, DateTime start, DateTime end, Account account)
{
if (System.Web.HttpContext.Current.Cache["ScheduleData"] == null)
{
var model = _eventService.FindAllEventsForAccountId(account.Id, start.Date, end.Date)
.Where(IsAppointmentNotCancelled)
.Select(a => new Models.ScheduledItem()
{
id = a.Id,
start = a.StartTime.ToString("H:mm:ss").Length < 8 ? string.Format(a.StartTime.ToString("yyyy-MM-dd {0}H:mm:ss"), 0) : a.StartTime.ToString("yyyy-MM-dd H:mm:ss"),
end = a.EndTime.ToString("H:mm:ss").Length < 8 ? string.Format(a.EndTime.ToString("yyyy-MM-dd {0}H:mm:ss"), 0) : a.EndTime.ToString("yyyy-MM-dd H:mm:ss"),
backgroundColor = GetColour(a),
title = GetTitle(a, account),
textColor = "#fff",
AppointmentType = GetType(a),
resourceId = GetResource(a)
}).ToList();
return model;
}
return null;
}
任何指针,例子都会很棒
有不同的缓存策略。 您必须决定哪一种更适合您的应用。 启用缓存的最简单方法是设置页面输出缓存(可能由param / header / etc改变)。 这是通过特殊的ASP.NET MVC OutputCache
属性完成的。
如果您需要进行更具体的缓存,那么您可以自己实现它。 有不同的方法如何做到这一点。 首先,您必须决定,存储缓存数据的位置和方式。 对所有用户来说都是常见的吗? 您可以将一些缓存数据放入Session
中,以便为单个用户和此特定Session
缓存它。 请注意,如果您有很多用户,您的应用将无法处理此负载。 我实际上不建议你这样做。
如果您拥有所有用户的公共数据,则可以使用标准HttpRuntime.Cache
对象在其中存储数据。 它只是一个键值存储。 您可以通过组合SomeData_{UserID}
等特殊键来存储用户特定的数据。 问题 - 它使您的应用程序有状态,通常您的应用程序应该是stateless
并且所有状态应该在SQL或缓存服务器或会话服务器等存储中。如果您的应用程序是stateless
- 您可以轻松地将其扩展到许多实例以适应高-加载。
有很多NoSQL
键值存储可以用作外部缓存。 它可以在不同的应用程序和实例之间共享。 我个人喜欢Redis
。 Microsoft建议将此项用于高负载项目。
有时缓存会导致数据非规范化。 您必须始终保持缓存最新。 因此,在开发缓存策略之前,我建议您考虑一下,在您的应用程序中可以优化什么。 通常瓶颈是数据库交互。 尝试分析数据库查询,看看哪些可以改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.