공유 캐시-무효화 우수 사례


14

캐시 객체를 무효화 / 업데이트하는 더 나은 방법이 무엇인지 알고 싶습니다.

전제 조건

  • 원격 memcached 서버가있는 경우 (여러 응용 프로그램의 캐시 역할을 함)
  • 모든 서버는 Azure (호환 지역, 동일한 데이터 센터)에서 호스팅됩니다.
  • 캐시 오브젝트 크기는 200 바이트에서 50 킬로바이트까지입니다.


접근 방식 1 (캐시에 최대한 빨리 저장)

  1. 오브젝트 A가 작성 됨-> 데이터베이스에 저장하고 캐시에 저장
  2. 클라이언트가 요청한 오브젝트 A-> 캐시가 있는지 점검하십시오.
  3. 객체 A가 업데이트 됨-> 데이터베이스에 저장, 캐시에 저장

접근법 1이 더 직관적 인 것 같습니다. 무언가가 생성되면 최대한 빨리 캐시에 넣으십시오. 누군가에 관계없이 필요합니다.


접근법 2 (lazy cache store)

  1. 오브젝트 A가 작성 됨-> 데이터베이스에 저장
  2. 클라이언트가 요청한 오브젝트 A-> 캐시가 있는지 점검하십시오.
  3. 객체 A가 업데이트 됨-> 데이터베이스에 저장, 캐시에서 키 삭제

접근법 2는 더 많은 메모리를 인식하는 것으로 보입니다. 이 방법에서는 요청 된 항목 만 캐시로 이동합니다.


질문 1 : 성능을 고려할 때 더 나은 방법은 무엇입니까? 메모리 나 CPU는 아직 계산하지 않습니다.

질문 2 : 제 생각은 일종의 조기 최적화입니까?

질문 3 : 다른 생각? 다른 접근법?

답변:


12
  1. 의존 한다는 것을 제외하고는 대답 할 수 없습니다. 어떤 경우에 가장 적합한 접근 방식을 결정하는지에 대한 많은 요소가 있습니다. 액세스 대 업데이트 비율은 얼마입니까?
  2. 레. 캐시가 필요하다는 결정 : 데이터없이 최적화하는 경우 기술적으로 조기에 최적화됩니다. 기술 / 경험적 지혜가 당신에게 일종의 캐시가 필요하다고 말할 수 있기 때문에 기술적으로 말합니다 . 레. 캐시가 가장 잘 작동하는 방식 결정 : 예, 확실히 조기 최적화입니다.
    • 최적화는 종종 최상의 / 가장 최적의 솔루션을 찾는 것이 아닙니다. 다음과 같이 진행되어야합니다.
      1. 시스템에서 병목 현상을 찾으십시오.
      2. 최소한의 작업으로 가장 큰 차이를 만들 수있는 곳을 찾으십시오.
      3. 최소한의 작업을 수행하십시오!
      4. 아직 충분히 빠릅니까? 그렇지 않으면 # 1로 이동하십시오.
      5. 끝난!
    • 솔직히 말해서, 당신이 묘사하는 접근법 중 어느 것도 복잡하지 않습니다. 두 가지를 모두 구현하고 어떤 것이 가장 효과가 좋은지 보시겠습니까?
    • 접근 # 2의 3 단계는 "오브젝트 A가 갱신 됨-> 데이터베이스에 저장, 항목을 캐시에 갱신"으로 변경 될 수 있습니다.

Baqueta, 답변 주셔서 감사합니다. 고맙습니다.
lurkerbelow

@lurkerbelow 다행입니다.
vaughandroid

2

memcached는 자체 정책으로 객체를 관리합니다. 캐시 된 객체는 아무도 액세스하지 않거나 memcached에 메모리가 부족하면 만료됩니다. 따라서 memcached의 객체는 객체를 만들 때 메모리 부족으로 인해 계속 무효화되므로 첫 번째 방법은 좋은 생각이 아닙니다.

Q1. 접근 방식 2는 성능 향상이 거의 없지만 memcached에 객체를 보내지 않기 때문에 성능 측면에서 더 좋습니다.

Q2. 말하기 어렵다. 병목 현상을 알고 조기에 발생하지 않는 접근 방식을 작성한다고 가정합니다.

Q3. memcached의 캐시와 같은 다른 방법이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.