JavaScript 예제와 함께 캐시 사용

캐시란 무엇이며 왜 필요한가요?



애플리케이션에서 캐싱은 대기 시간을 줄이거나 불필요한 리소스를 사용하지 않도록 데이터를 메모리 어딘가에 전략적으로 저장하는 것입니다. 특정 데이터에 더 빠르게 액세스하기 위해 사용자에게 더 가까운 서버 또는 실제로 사용자 컴퓨터에 있을 수 있습니다.

캐시를 사용한 장단점



캐시에서 빠른 액세스를 위해 항목을 메모리에 저장하는 것처럼 (당연히) 데이터 지속성이 없습니다. 즉, 서버를 재설정하면 데이터가 손실됩니다. Redis는 메모리 덤프를 사용하여 지속성 스냅샷을 생성하여 이 문제를 해결합니다.

데이터를 메모리에 저장하면 예를 들어 HDD보다 저장 용량이 낮아 비용이 더 많이 들기 때문에 무엇을 얼마 동안 저장할 것인지에 대한 좋은 전략을 가지고 있어야 합니다.

캐시 구조



구현 측면에서는 캐시가 키/값 쌍으로 항목을 저장하는 사전 데이터 구조로 사용된다는 점만 알면 됩니다. 예를 들어 매개변수를 키로 사용하여 특정 http 요청에 대한 데이터를 저장할 수 있습니다.

캐시 예시 사용 사례



날씨 데이터용 타사 API를 사용하여 날씨 애플리케이션 이미지를 만들고 이 API는 요청당 비용을 청구합니다. 사용자를 위해 업데이트된 데이터를 반환하는 것이 타당하지만 매 초마다 정확할 만큼 충분히 중요합니까? TTL이 60초인 캐시를 사용하면 특정 영역에서 애플리케이션을 사용하는 사용자 수에 관계없이 분당 타사 API에 한 번만 요청하고 캐시 데이터로 사용자를 업데이트할 수 있습니다. 이렇게 하면 이 API에 대한 많은 요청을 줄이고 비용을 절약할 수 있으며 데이터를 사용자에게 더 빠르게 반환할 수 있습니다.

간단한 메모리 내 캐시 예제



Node.js의 이 예제에서는 node-cache 패키지를 사용하여 메모리 내 캐시를 빌드합니다.

import axios from "axios";
import NodeCache from "node-cache";

class WeatherRepository {
  // Lets set the default TTL to 60 seconds, so the data will expire from the
  // cache in 60 seconds and we'll have to fetch the updated data from the API.

  weatherCache = new NodeCache({ stdTTL: 60 });

  async getCurrentWeatherInformation(city) {
    // First, lets check if the required data is in cache
    const cachedData = this.weatherCache.get(city);

    // If it is, return it
    if (cachedData) return cachedData;

    const { data: weatherData } = await axios.get(
      `https://weather-api-url/?city=${city}`
    );

    // Else, fetch the data from the API then save it on the cache.
    // Here we'll use the city as key.
    this.weatherCache.set(city, weatherData);

    return weatherData;
  }
}

export { WeatherRepository };


메모리 내 캐시보다 훨씬 더 많은 기능을 갖춘 원격 데이터 구조 서버가 필요한 경우 Redis를 찾으십시오.

결론



캐시는 대기 시간을 줄이고 최근 데이터 또는 재사용 가능성이 있는 데이터를 저장하는 데 매우 사용되는 전략입니다. 이 기사가 유용하고 프로그래밍 무기고에 캐시를 추가하기를 바랍니다. 질문이나 제안 사항이 있으면 알려주세요!

좋은 웹페이지 즐겨찾기