2011-08-25 2 views
2

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

В настоящее время это доступно в моем 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

Кэш определенно имеет смысл, если лицензии широко используются в приложении и не являются специфическими для любого пользовательского сеанса. Кэш может справиться с истечением 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>; 
Смежные вопросы