[TIL] Redis Caching

김시원·2023년 6월 9일
0

TIL

목록 보기
41/50
post-custom-banner

📌 What I newly learned

Redis로 caching 적용하기

=> 위치 기반 추천 병원을 조회하는 API를 호출할때 매번 카카오 모빌리티 API 호출과 실시간 병상 데이터 웹 크롤링을 진행하여, 이를 개선하고자 캐싱을 사용하였다.

아무래도 주제가 주제이니만큼 환자의 실시간 위치를 반영한 병원 조회 결과의 정확도가 너무 떨어질 수는 없을 것 같아, 병원을 처음 조회하고 60초 이내고 다시 재요청을 하는 경우만 (무분별한 새로고침에 대비하는 방향으로) cached된 데이터를 불러오는 방식을 생각하였다. Redis에 증상 보고서 id를 key값으로, 병원을 조회한 결과를 value로 넣고 TTL을 60초로 설정해주었다.

import { CacheModule } from '@nestjs/cache-manager';
import * as redisStore from 'cache-manager-ioredis';

@Module({
  imports: [
    TypeOrmModule.forFeature([Hospitals]),
    CacheModule.register({
      name: 'redis-cache',
      store: redisStore,
      host: 'localhost',
      port: 6379,
      ttl: 60,
    }),
  ],
  // ... 기타
})
export class HospitalsModule {}

Caching 적용 방법

  1. 만약 해당 report_id에 대해 이미 캐싱되어 있는 key가 존재하는 경우 바로 redis cached data를 불러와서 return
  2. 그렇지 않은 경우, 비지니스 로직을 동일하게 수행하고 마지막에 결과 object를 redis에 추가
  3. 추가된 데이터는 60초 동안 유효하므로, 60초 내로 사용자가 추천 병원 조회 API를 재호출할 시 cached된 병원 목록을 사용자에게 return
post-custom-banner

0개의 댓글