【问题标题】:ASP.Net MVC Session CacheASP.Net MVC 会话缓存
【发布时间】:2015-03-13 18:03:12
【问题描述】:

我希望通过使用一些缓存之王来提高性能。 例如,用户登录并访问约会系统,我想缓存此数据,从缓存中查询此数据,然后在添加新约会时更新缓存

例如,我正在写这个,但我认为这是应用程序缓存而不是会话(不希望其他用户看到其他人的数据)

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;
        }

任何指针,例子都会很棒

【问题讨论】:

标签: c# .net asp.net-mvc session caching


【解决方案1】:

有不同的缓存策略。您必须决定哪一种更适合您的应用。启用缓存的最简单方法是设置页面输出缓存(可能因参数/标题/等而异)。这是由特殊的 ASP.NET MVC OutputCache 属性完成的。

如果你需要做更具体的缓存,那么你可以自己实现。有不同的方法可以做到这一点。首先,您必须决定将缓存数据存储在何处以及如何存储。对所有用户来说都是通用的吗?您可以将一些缓存数据放入Session,以便为单个用户和这个特定的Session 缓存它。请注意,如果您有很多用户,您的应用将无法处理此负载。我实际上不建议你这样做。

如果您有所有用户的公共数据,您可以使用标准的HttpRuntime.Cache 对象在其中存储数据。它也只是一个键值存储。您可以通过组合特殊键(如SomeData_{UserID})将用户特定的数据存储在其中。问题 - 它使您的应用程序有状态,通常您的应用程序应该是 stateless 并且所有状态都应该在 SQL 或缓存服务器或会话服务器等存储中。如果您的应用程序是 stateless - 您可以轻松地将其扩展到许多实例以适应高负载。

有很多 NoSQL 键值存储可以用作外部缓存。它可以在不同的应用程序和实例之间共享。我个人喜欢Redis。这是 Microsoft 推荐用于高负载项目的一种。

有时缓存会导致数据非规范化。您必须始终保持缓存是最新的。因此,在开发缓存策略之前,我建议您考虑一下,可以在您的应用程序中优化哪些内容。通常瓶颈是数据库交互。尝试分析数据库查询,看看有什么可以改进的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2013-01-14
    相关资源
    最近更新 更多