У меня есть приложение ASP.NET, которое кэширует некоторые бизнес-объекты. Когда новый объект сохраняется, я вызываю удаление на ключ, чтобы очистить объекты. Новый список должен быть ленивым при загрузке в следующий раз, когда пользователь запросит данные.ASP.NET Cache - обстоятельства, при которых Remove («ключ») не работает?
За исключением проблем с различными видами кеша у разных клиентов.
- Два пользователей просматривают сайт
- Нового объект будет сохранен пользователем 1 и кэш удаляется
- Пользователь 1 видит до даты представления данных
- User 2 также использует сайт, но не по какой-то причине, увидеть новые кэшированные данные после того, как пользователь 1 накопил новый объект - они по-прежнему видеть старый список
Это сокращенный вариант кода:
public static JobCollection JobList
{
get
{
if (HttpRuntime.Cache["JobList"] == null)
{
GetAndCacheJobList();
}
return (JobCollection)HttpRuntime.Cache["JobList"];
}
}
private static void GetAndCacheJobList()
{
using (DataContext context = new DataContext(ConnectionUtil.ConnectionString))
{
var query = from j in context.JobEntities
select j;
JobCollection c = new JobCollection();
foreach (JobEntity i in query)
{
Job newJob = new Job();
....
c.Add(newJob);
}
HttpRuntime.Cache.Insert("JobList", c, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
}
public static void SaveJob(Job job, IDbConnection connection)
{
using (DataContext context = new DataContext(connection))
{
JobEntity ent = new JobEntity();
...
context.JobEntities.InsertOnSubmit(ent);
context.SubmitChanges();
HttpRuntime.Cache.Remove("JobList");
}
}
Есть ли у кого-нибудь идеи, почему это может произойти?
Редактировать: Я использую Linq2SQL для восстановления объектов, хотя я избавляюсь от контекста.
Кэш - это потокобезопасный – fengd