Cache-Aside

애플리케이션에서 가장 일반적으로 사용되는 캐시 업데이트 전략이다.

주로 읽기 작업량이 많은 애플리케이션과 함께 사용한다.

  1. 애플리케이션은 캐시에 데이터가 있는지 체크한다.
  2. cache hit를 하면, 데이터는 캐시로부터 읽혀져 client에게 반환된다.
  3. cache miss를 하면, 애플리케이션은 데이터베이스에서 데이터를 읽어온 후 복제한 데이터를 캐시에 저장한다. 그후 클라이언트에게 데이터를 반환한다.

 

 

Read-Through

Cache Aside Pattern과 비슷하게 데이터베이스와 캐시를 모두 관리하지만, 데이터 동기화는 캐시 제공자에게 위임한다.

즉, Cache Aside에서든 애플리케이션이 데이터베이스에서 데이터를 가져와 캐시에 채우고 Read-Through 패턴에서는 라이브러리 또는 캐시 제공자에 의해 동기화가 이루어진다.

Read Through 또한 읽기 작업량이 많은 작업에 적합하다.

 

Write-Through

캐시는 애플리케이션과 데이터베이스 사이에 위치하며, 데이터베이스에 대한 읽기 및 쓰기를 담당한다.

쓰기 작업은 데이터를 캐시에 먼저 기록한 다음 데이터 저장소에 동기화하므로 전반적으로 느려질 수 있다.

반면 읽기 작업은 동일한 데이터에 대해 빠르게 동작한다. 캐시 데이터가 오래되지 않았다는 장점이 있으나, 캐시에 쓰여진 대부분의 데이터가 읽히지 않을 수 있다.

  1. 애플리케이션은 캐시에 데이터를 추가하거나 업데이트 한다.
  2. 캐시는 데이터베이스에 동기식으로 데이터를 쓴다.
  3. 캐시가 데이터를 애플리케이션에 반환한다.

 

Write Behind

Write Back 전략으로도 알려져 있으며, 데이터를 먼저 캐시에 쓴 다음 비동기식으로 데이터를 데이터 저장소에 업데이트하여 쓰기 성능을 향상시킨다.

단, 다른 캐시 전략에 비해 구현이 어려우며 데이터를 데이터베이스에 저장하기 전에 캐시가 다운되면 데이터 손실이 발생하는 문제가 있다.

Write Behind는 쓰기가 많은 작업에 적합하다.

 

Refresh Ahead

캐시가 만료되기 전에 최근 액세스한 주요 캐시를 자동으로 새로 고침하도록 구성된다.

만약 미래에 어떤 데이터가 필요한지 정확하게 예측할 수 있다면, 속도를 더욱 개선시킬 수 있다.

단, 향후 어떤 데이터가 필요한지 정확하게 예측하지 못하면 사용하지 않을 때보다 성능이 저하될 수 있다.

참조

https://medium.com/system-design-blog/what-is-caching-1492abb92143