캐싱을 사용하여 권한 확인시 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 연결 방식
- StrictRedis를 이용하여 직접 커넥션을 필요할 때 마다 취득 후 사용하는 방법
- 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 |