Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- hive
- grafana
- aws ec2
- NoSQL
- 논리삭제
- slack
- JWT
- DAG
- 계정 관리
- 물리삭제
- Locust
- soft delete
- docker
- nginx
- elasticsearch
- Django
- 오블완
- hard delete
- redis
- Airflow
- logstash
- 티스토리챌린지
- Next.js
- ci/cd
- AWS
- unique constraint
- prometheus
- node exporter
- Hadoop
- 로그 백업
Archives
- Today
- Total
먹수의 개발일지
[Django] Redis 캐싱으로 성능 최적화 본문
Redis란?
메모리 기반 데이터 저장소이다. 데이터를 메모리에 저장하기 때문에 매우 빠른 속도로 데이터에 접근할 수 있다.
- 유연한 데이터 구조: 문자열, 리스트, 해시, 셋(set), 정렬된 셋(sorted set) 등 다양한 데이터 구조를 지원
- 퍼시스턴스: 메모리 기반이지만 데이터를 디스크에 저장하여 장애 발생 시 데이터 복구가 가능
- 확장성: 클러스터링 기능을 통해 대규모 트래픽에도 대응 가능
✅ 언제 사용
In-Memory 데이터베이스의 하나로, 유실되어도 괜찮지만 빠른 데이터 조회를 할 때 사용한다. 기존 관계형 데이터베이스(MySQL, PostgreSQL)보다 훨씬 빠른 이유는 메모리 접근이 디스크 접근보다 빠르기 때문이다.
✅ 단점
1) 디스크 즉, 파일이 아닌 메모리상에 데이터를 저장함. but 프로세스 내려가면 데이터가 사라짐.
→ RDB 스냅샷으로 복구할 수 있음. 최근에는 실시간 처리는 인메모리에서, 보관은 디스크 기반 스토리지로 하는 구조가 성능과 효율을 함께 달성할 수 있다.
2) 싱글스레드로 lock을 제공하지 않는다.
-> 절대 쓰면 안되는 명령어 : 모든 키를 보여주는 keys나 모든 데이터를 소거하는 flushall, 콜렉션 등(100만건 넘어가면 처리시간이 10초, 1000천만건이 넘으면 100초씩 늘어남)
Django Redis 설치
pip install django-redis
Django settings.py에 Redis 설정 추가
# settings.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1", # Redis 서버 주소
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
"KEY_PREFIX": "myapp" # 키 접두사 추가
}
}
Redis로 데이터 캐싱하기
from django.core.cache import cache
from django.http import JsonResponse
def seoul_market_info(request):
# 요청 인자에 따라 캐시 키 생성
cache_key = 'seoul_market_info_' + str(request.GET.get('parameter'))
# 캐시에서 데이터 조회
cached_data = cache.get(cache_key)
if cached_data:
return JsonResponse(cached_data)
else:
# 서울 상권정보 조회 로직
data = {
'market_name': '서울 상권',
'info': '상권 정보 내용',
}
# 조회 결과를 캐시에 저장 (예: 10분 동안 유효)
cache.set(cache_key, data, timeout=600) # 600초 = 10분
return JsonResponse(data)
'back-end > Django' 카테고리의 다른 글
[Locust] Django와 Locust로 API 부하 테스트 (1) | 2024.11.19 |
---|---|
Django Signals (0) | 2024.11.10 |
[DRF] Responsed Unauthorized 401 in AllowAny permission (1) | 2023.02.21 |
Comments