D-W*_*D-W 1 .net c# asp.net-mvc session caching
我希望通过使用一些缓存之王来提高性能。例如,用户登录并访问约会系统,我想缓存此数据,从缓存中查询此数据,然后在添加新约会时更新缓存
例如,我正在写这篇文章,但我认为这是应用程序缓存而不是会话(不希望其他用户看到其他人的数据)
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;
}
Run Code Online (Sandbox Code Playgroud)
任何指针,例子都会很棒
有不同的缓存策略。您必须决定哪一种更适合您的应用。启用缓存的最简单方法是设置页面输出缓存(可能因参数/标题/等而异)。这是通过特殊的 ASP.NET MVCOutputCache属性来完成的。
如果你需要做更具体的缓存,那么你可以自己实现。有不同的方法可以做到这一点。首先,您必须决定在何处以及如何存储缓存数据。这对所有用户来说都是通用的吗?您可以将一些缓存数据放入 a 中,Session以便为单个用户和特定的Session. 请注意,如果您有很多用户,您的应用程序将无法处理此负载。我实际上不建议你这样做。
如果您有所有用户的通用数据,您可以使用标准HttpRuntime.Cache对象来存储数据。它也只是一个键值存储。您可以通过编写特殊键(例如SomeData_{UserID}. 问题 - 它使您的应用程序有状态,而通常您的应用程序应该是有状态的,stateless并且所有状态都应该存储在 SQL、缓存服务器或会话服务器等存储中。如果您的应用程序是有状态的stateless,您可以轻松地将其扩展到许多实例以适应高负载。
有很多NoSQL键值存储可以用作外部缓存。它可以在不同的应用程序和实例之间共享。我个人喜欢Redis。Microsoft 推荐将此方案用于高负载项目。
有时缓存会导致数据非规范化。您必须始终保持缓存最新。因此,在开发缓存策略之前,我建议您考虑一下,您的应用程序中可以优化哪些内容。通常瓶颈是数据库交互。尝试分析数据库查询并查看可以改进的地方。
| 归档时间: |
|
| 查看次数: |
6981 次 |
| 最近记录: |