일부 비즈니스 개체를 캐시하는 ASP.NET 응용 프로그램이 있습니다. 새로운 객체가 저장되면, 객체를 삭제하기 위해 키의 remove를 호출합니다. 새 목록은 사용자가 다음에 데이터를 요청할 때 게으른로드되어야합니다.ASP.NET 캐시 - 제거 ("키")가 작동하지 않는 상황?
다른 클라이언트의 캐시보기가 서로 다른 점을 제외하고는 다른 점이 있습니다.
- 두 사용자는 새로운 오브젝트가 사용자 1에 의해 저장되고 캐시가 사용자 1도
- 사용자 2를 사용하는 데이터의 최신보기로 최대를보고
- 제거 사이트
- 을 탐색 할 수 있습니다 이 사이트는하지만, 사용자 1은 새로운 객체를 저장 한 후 어떤 이유로 새로운 캐시 된 데이터가 표시되지 않습니다 - 그들은 이전 목록을 계속 볼
이 코드의 단축 버전입니다 :
,536,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