在MVC2中使用缓存存储

时间:2011-08-25 18:07:09

标签: asp.net-mvc-2 session caching outputcache

我有一个持有用户有效许可证的类,每15分钟就会“验证”一次,以确保当前许可证有效并添加/删除任何可能已更改的许可证。

目前,这是在我的ApplicationController中访问的,ApplicationController是应用程序中的每个其他控制器继承的,因此每当用户执行任何操作时,它都会确保他们拥有有效的许可/权限。

许可模式:

public class LicenseModel
{
    public DateTime LastValidated { get; set; }
    public List<License> ValidLicenses { get; set; }
    public bool NeedsValidation
    {
        get{ return ((DateTime.Now - this.LastValidated).Minutes >= 15);}
    }

    //Constructor etc...
}

验证过程: (发生在ApplicationController的Initialize()方法内)

LicenseModel licenseInformation = new LicenseModel();     
if (Session["License"] != null)
{
    licenseInformation = Session["License"] as LicenseModel;
    if (licenseInformation.NeedsValidation)
        licenseInformation.ValidLicenses = Service.GetLicenses();
        licenseInformation.LastValidated = DateTime.Now;
        Session["License"] = licenseInformation;
}
else
{
    licenseInformation = new LicenseModel(Service.GetLicenses());
    Session["License"] = licenseInformation;
}

要点:

正如您所看到的,此过程当前使用Session来存储LicenseModel,但是我想知道使用Cache存储它是否更容易/更有效。 (或者可能是OutputCache?)以及我如何实现它。

1 个答案:

答案 0 :(得分:1)

如果许可证在应用程序范围内使用并且不是特定于任何用户会话,则缓存肯定会更有意义。缓存可以为您处理15分钟的到期,您将不再需要LicenseModel类上的NeedsValidation或LastValidated属性。您可以将所有模型一起取消,只需存储有效许可证列表,如下所示:

if (HttpContext.Cache["License"] == null)
{
    HttpContext.Cache.Insert("License",Service.GetLicenses(), null,
    DateTime.Now.AddMinutes(15), Cache.NoSlidingExpiration);
}

var licenses = HttpContext.Cache["License"] as List<License>;