공개 읽기 웹 사이트에 대한 캐시 삽입 방법을 잠글 때 다른 문제를 생각할 때 캐시에서 읽는 다른 스레드를 차단하는 것 외에도.HttpContext.Current.Cache.Insert 메서드를 잠그면 아무 문제가 없습니까?
실제 데이터 검색 및 캐시에 삽입하는 데는 1 초가 넘지 않아야합니다. 더 중요한 것은 여러 스레드가 잠재적으로 모두 Insert 메서드를 동시에 누르는 것을 원하지 않는다는 것입니다.
샘플 코드는 무엇인가 같습니다 : I 데이터의 양에 영향을 줄 수있는, 높은 아마도 때문에, 두 번 이상 수행하면 데이터 검색을 방지하기 위해이 작업을 수행 할 것으로 기대
public static readonly object _syncRoot = new object();
if (HttpContext.Current.Cache["key"] == null)
{
lock (_syncRoot)
{
HttpContext.Current.Cache.Insert("key", "DATA", null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
}
Response.Write(HttpContext.Current.Cache["key"]);
감사하지만 두 번 확인 된 잠금 장치에 대해 잘 모르겠습니다. 두 번째 null 체크는 어떤 이점을 가져 옵니까? – Ekk
이 두 번째'data == null' 검사는'[RETRIEVE DATA]'부분이 한 번만 실행되도록합니다. 여러 스레드가 동시에 메서드를 호출 할 때'lock (_syncRoot) '은 한 번에 하나의 스레드 만 해당 블록을 실행하도록합니다. 다른 모든 스레드는 대기해야합니다. 그러나 첫 번째 스레드가 완료되면 첫 번째 대기 스레드는 해당 코드를 실행하고'[RETRIEVE DATA] '부분을 실행합니다. 그래서 두 번째'data == null' 체크가 필요합니다. – Steven