Redis

Redis Cache

gudaeng 2025. 3. 2. 22:25

캐싱을 사용하여 권한 확인시 DB요청 최소화

Redis vs In-Memory Cache

  • in memory 대신 redis 사용 이유
    • 단일 서버의 경우 in memory를 사용해도 문제 없음
    • 서버를 많이 띄우게 되는 경우 캐싱된 내용을 공유하도록 하기 위해(중복 요청 최소화)
    • Redis는 영속성 보장 (디스크에 데이터 저장 가능)
    • 다양한 자료구조 지원 (String, List, Hash, Set, Sorted Set 등)

Redis 라이브러리 선택

  • aioredis 대신 redis 사용 이유
    • aioredis는 python 3.11에서 지원 X → redis에 aioredis 내용 통합됨
    • redis-py 라이브러리가 비동기 지원 (redis.asyncio 사용)

Redis 연결 방식

  1. StrictRedis를 이용하여 직접 커넥션을 필요할 때 마다 취득 후 사용하는 방법
  2. Connection Pool을 이용하여 pool이 커넥션을 관리하도록 하는 방법
    • 권장되는 방식
    • 커넥션 재사용으로 성능 향상
    • 커넥션 수 제한 가능

⚠️ Redis의 각 인스턴스는 자체 커넥션 풀을 받음 → 많이 생성되면 각각 커넥션 풀이 생성됨 → 개별적으로 많은 커넥션 풀이 생성되면 성능 문제 발생 가능성 증가 → Connection Pool 방식 권장

Redis Pipeline

  • redis로 요청보낼 것을 묶어서 보내는 방법
  • 원자성 유지 필요할 때 사용하면 좋음
  • 사용 사례:
    • DB 생성 관련 작업
    • 최초 한번만 생성되어야 하거나 중복 생성 막아야하는 경우
    • 대량의 데이터 처리 시 성능 향상

Redis Cache 설정 (SET 명령어 옵션)

  • ex: 지정한 초(second) 이후에 데이터가 지워짐
  • px: 지정한 밀리초(millisecond) 이후에 데이터가 지워짐
  • nx: 데이터베이스에 같은 키가 없을 경우에만 저장. 주로 lock 처리에 사용
  • xx: 지정한 키가 이미 데이터베이스에 있을 경우에만 저장
  • keepttl: 저장시 기존 expire time 유지
  • exat: 지정한 timestamp-seconds 이후 데이터 지워짐
  • pxat: 지정한 timestamp-milliseconds 이후 데이터 지워짐
  • get: 새로운 값을 넣고 이전 값을 반환

메모리 사용량

  • 10000개 데이터 기준: 약 197.28MB (used_memory_human:197.28M)

성능 최적화 팁

  • 적절한 데이터 만료 시간 설정
  • 큰 컬렉션의 경우 페이지네이션 사용
  • 메모리 모니터링 및 관리
  • 캐시 히트율 모니터링

'Redis' 카테고리의 다른 글

Redis 메모리 관리  (0) 2025.03.02
Redis Cluster  (0) 2025.03.02