我正在创建一个Web应用程序,并且我的缓存存在问题。
我的应用程序有大量数据我想尝试,而不是每次需要信息时都不会从sql数据库调用。
我尝试过以下方式使用缓存:
public static List<DAL.EntityClasses.AccountsEntity> Accounts
{
get
{
if (HttpContext.Current.Cache["Account"] == null)
{
HttpContext.Current.Cache.Insert("Account", LoadAccounts(), null, DateTime.Now.AddHours(4), System.Web.Caching.Cache.NoSlidingExpiration);
}
return (List<DAL.EntityClasses.AccountsEntity>)HttpContext.Current.Cache["Account"];
}
}
问题在于,当我向缓存中添加项目时,我已经缓存的项目将被删除。
因此大多数调用都在调用DB来获取缓存的数据。
我哪里出错?
由于
答案 0 :(得分:3)
这对于LRU缓存来说是正常的 - 当缓存填满容量时,最少使用的项目会被推出。
Configure your cache更大量的数据。
答案 1 :(得分:1)
仅供参考: 您的Accounts属性的实现存在问题,这与您的原始问题无关,但可能会在将来出现问题:
可能发生的是这一行之间的
if (HttpContext.Current.Cache["Account"] == null)
和这一行:
return (List<DAL.EntityClasses.AccountsEntity>)HttpContext.Current.Cache["Account"];
您的缓存可以清除/可以从缓存中删除帐户条目。
更好的实施方式是:
public static List<DAL.EntityClasses.AccountsEntity> Accounts
{
get
{
List<DAL.EntityClasses.AccountsEntity> accounts =
HttpContext.Current.Cache["Account"] as List<DAL.EntityClasses.AccountsEntity>
if(accounts == null)
{
accounts = LoadAccounts();
HttpContext.Current.Cache.Insert("Account", accounts, null, DateTime.Now.AddHours(4), System.Web.Caching.Cache.NoSlidingExpiration);
}
return accounts;
}
}