【发布时间】:2011-02-18 07:28:30
【问题描述】:
我有一个缓存一些业务对象的 ASP.NET 应用程序。保存新对象时,我在键上调用 remove 以清除对象。下次用户请求数据时,应该延迟加载新列表。
除非在不同客户端缓存的不同视图存在问题。
- 两个用户正在浏览该网站
- 用户 1 保存了一个新对象并删除了缓存
- 用户 1 看到数据的最新视图
- 用户 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 检索对象,尽管我正在处理上下文。
【问题讨论】: