Azure 역할 내 캐시의 만료 및 제거
중요
모든 새 개발에서는 Azure Redis Cache를 사용하는 것이 좋습니다. Azure Cache 제품을 선택하는 방법에 대한 현재 설명서 및 지침 은 나에게 적합한 Azure Cache 제품을 참조하세요.
Microsoft Azure Cache는 캐시된 개체를 메모리에 영구적으로 유지하지 않습니다. Remove 메서드를 사용하여 캐시에서 명시적으로 제거되는 것 외에도 캐시된 개체는 캐시 클러스터에 의해 만료되거나 제거될 수 있습니다.
만료
캐시 만료는 캐시 클러스터가 캐시된 개체를 캐시에서 자동으로 제거하도록 허용합니다. Put 또는 Add 메서드를 사용하는 경우 캐시된 개체가 캐시에 상주하는 시간을 결정하는 특정 캐시 개체에 대해 개체 시간 제한 값을 옵션으로 설정할 수 있습니다. 개체 시간 초과 값이 개체가 캐시되는 시점에 제공되지 않으면 캐시된 개체에서 기본 만료 시간을 사용합니다.
역할 기반 캐싱을 사용하는 경우 만료에 대한 세 가지 옵션이 있습니다.
만료 유형 | Description |
---|---|
없음 |
만료가 사용하지 않도록 설정됩니다. 항목을 제거하거나 캐시 클러스터를 다시 시작할 때까지 항목이 캐시에 유지됩니다. |
Absolute |
항목을 만든 시점으로부터 설정된 시간이 지나면 항목이 만료됩니다. |
슬라이딩 |
항목에 마지막으로 액세스한 시점으로부터 설정된 시간이 지나면 항목이 만료됩니다. 개체에 액세스할 때마다 슬라이딩 기간이 다시 설정됩니다. 이로 인해 자주 사용되는 항목이 캐시에 더 오래 유지됩니다. |
참고
로컬 캐시와 함께 사용할 경우 슬라이딩 만료의 동작에 주의해야 합니다. 로컬 캐시에서 항목을 읽을 경우 캐시 클러스터에 있는 개체에 액세스하지 않습니다. 따라서 항목을 로컬에서 읽는 경우에도 항목이 서버에서 만료될 수 있습니다.
Shared Caching 만료는 항상 절대이며 기본 만료 시간을 설정할 방법이 없습니다. Shared Caching 항목은 48시간 후에 만료됩니다. 그러나 Put 및 Add 메서드를 사용하여 코드에서 명시적 만료 시간을 설정할 수 있습니다. ASP.NET 공급자는 이러한 오버로드를 자동으로 사용하여 세션 상태 및 출력 캐싱에 대한 명시적 시간 제한을 제공합니다. 두 경우 모두 캐시 크기가 Shared Caching 제품의 제한을 초과하면 캐시에서 가장 최근에 사용한 항목이 제거됩니다.
캐시된 개체가 동시성의 이유로 잠겨 있으면 만료 기한을 지나더라도 캐시에서 제거되지 않습니다. 잠금이 해제될 경우에는 만료 기한을 지난 캐시된 개체는 캐시에서 즉시 제거됩니다.
잠금이 해제된 만료 개체가 즉시 제거되지 않도록 하기 위해 Unlock 메서드는 캐시된 개체의 만료 연장도 지원합니다.
로컬 캐시 무효화
로컬 캐시에는 시간 제한 기반 무효화와 알림 기반 무효화라는 두 가지 보완적인 형식의 무효화가 있습니다.
팁
개체가 로컬 캐시에 저장된 후 무효화될 때까지 응용 프로그램은 해당 개체를 사용할 수 있습니다. 이때 해당 개체가 캐시 클러스터의 다른 클라이언트에서 업데이트되는지는 상관없습니다. 이러한 이유로 자주 변경하지 않는 데이터에 대해 로컬 캐시를 사용하도록 설정하는 것이 가장 좋습니다.
시간 제한 기반 무효화
개체가 로컬 캐시로 다운로드되면 캐시 클라이언트 구성 설정에 지정된 개체 시간 제한 값에 이를 때까지 보존됩니다. 이 시간 제한 값에 도달한 후에는 개체가 무효화되어 다음에 개체 관련 요청을 받으면 캐시 클러스터에서 개체를 새로 고칠 수 있습니다.
알림 기반 무효화
캐시 클라이언트가 로컬 캐시를 사용하도록 설정되어 있으면 캐시 알림을 사용하여 로컬로 캐시된 개체를 자동으로 무효화할 수 있습니다. 해당 개체의 수명을 "필요에 맞게" 단축함으로써 응용 프로그램이 부실 데이터를 사용할 가능성을 줄일 수 있습니다.
참고
알림은 Shared Caching 지원되지 않습니다.
캐시 알림을 사용하면 응용 프로그램은 일정한 간격으로 캐시 클러스터를 검사하여 새 알림을 사용할 수 있는지 확인합니다. 이 간격을 폴링 간격이라고 하며, 기본적으로 매 300초로 설정되어 있습니다. 폴링 간격은 응용 프로그램 구성 설정에서 초 단위로 지정됩니다. 알림 기반 무효화를 함께 사용하더라도 시간 제한은 로컬 캐시의 항목에 그대로 적용된다는 점에 유의하십시오. 즉, 알림 기반 무효화는 시간 제한 기반 무효화와 상호 보완적입니다.
자세한 내용 및 예제는 Azure In-Role Cache의 로컬 캐시를 참조하세요.
제거
각 캐시 호스트에서 캐시에 사용 가능한 메모리 용량을 유지하기 위해 LRU(오래 전에 사용한 항목) 제거가 지원됩니다. 임계값을 사용하여 클러스터의 모든 캐시 호스트 전반에 걸쳐 메모리를 균등하게 분배할 수 있습니다. 이 임계값은 각 컴퓨터에서 사용 가능한 실제 메모리 양과 각 컴퓨터에서 예약된 캐싱 메모리의 백분율이라는 두 가지 요인으로 결정됩니다.
메모리 소비가 임계값을 초과하면, 메모리 압력이 해소될 때까지 만료 여부와 상관없이 메모리에서 개체가 제거됩니다. 그런 다음 캐시된 개체는 최적의 메모리 분배 상태를 유지하기 위해 캐시 클러스터의 다른 컴퓨터로 경로가 전환될 수 있습니다.
경고
제거를 사용하지 않도록 설정하면 제한의 위험이 있습니다. 이 경우 메모리가 임계값을 초과하지만 메모리 부족을 완화할 수 있는 기능이 없습니다. 이 상태의 캐시에 항목을 추가하려고 하는 클라이언트는 문제가 해결될 때까지 예외를 수신합니다. Shared Caching 캐시에서 제거를 사용하지 않도록 설정하는 것을 지원하지 않습니다.
만료 및 제거 설정 지정
만료 및 제거 동작은 클러스터 구성 설정의 명명된 캐시 수준에서 구성됩니다.
다음 메서드를 사용하면 캐시에 지정된 기본 설정을 다시 정의할 수 있습니다.
Add and Put 메서드는 캐시에 추가하는 개체에 대해서만 만료 시간 제한 값을 지정할 수 있는 오버로드를 제공합니다.
PutAndUnlock 및 Unlock 메서드는 잠금 해제 후 개체의 만료를 확장할 수 있는 오버로드를 제공합니다.
ResetObjectTimeout 메서드를 사용하면 개체의 수명을 명시적으로 확장하여 캐시의 만료 설정을 재정의할 수 있습니다.
캐시 클러스터가 다시 시작될 경우에는 만료 또는 제거 설정과 상관없이 캐시의 모든 개체가 지워집니다. 데이터가 캐시에 없으면 응용 프로그램 코드를 통해 데이터 원본에서 캐시를 다시 로드해야 합니다. 이를 흔히 캐시 배제 프로그래밍 패턴이라고 합니다.