Использование Cache Storage в MVC2 - PullRequest
2 голосов
/ 25 августа 2011

У меня есть класс, который содержит действительные лицензии для пользователя, и каждые 15 минут он «проверяется», чтобы убедиться, что текущие лицензии действительны, и добавлять / удалять любые, которые могли измениться.

В настоящее время к этому обращаются в моем 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...
}

Процесс проверки: (происходит внутри метода Initialize () ApplicationController)

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 Ответ

1 голос
/ 25 августа 2011

Кэш определенно будет иметь больше смысла, если лицензии используются в масштабах всего приложения и не относятся к какой-либо пользовательской сессии. Кэш может обработать для вас 15-минутный срок действия, и вам больше не понадобятся свойства NeedsValidation или LastValidated в вашем классе LicenseModel. Возможно, вы могли бы покончить с моделью вместе и просто сохранить список действительных лицензий, например, так:

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