1. Cache 설정
Caching은 잦은 접근이 예상되어 데이터베이스에 직접 접근하지 않고 Memchached나 Redis 같은 속도가 빠른 저장소에 데이터를 저장해놓는 방식이다. Django에서는 아래와 같이 settings.py에 설정하여 사용할 수 있다.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
},
'redis': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://localhost:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
LOCATION이 Cache용 서버 위치를 지정해주는 부분이다. 이를 지정해주기 위해서는 requirements.txt에 Cache 저장소 추가해주거나 docker image로 연결하는 등 따로 설치가 필요하다.
2. Cache 사용법
설정이 완료된 후 아래 import 구문을 작성하여 cache를 활용할 수 있다.
from django.core.cache import cache
그리고 기본 구문들은 다음과 같다.
cache.set('key', 'value', timeout=300)
data = cache.get('key')
cache.delete('key')
if cache.has_key('key'):
pass
기본적으로 key, value값으로 구성된다. 그리고 set 메서드의 timeout 속성을 통해 cache를 유지할 시간을 설정한다. get 메서드에서 key값에 해당하는 value를 못 얻어오면 404 에러가 발생한다.
이외 @cache_page 데코레이터는 view에서 응답해준 페이지를 얼마나 유지할지 설정해줄 수도 있다.
from django.views.decorators.cache import cache_page
@cache_page(60 * 60)
def my_view(request):
pass
여기서 (60 * 60)은 minutes 단위로 1시간이 된다.
3. request-specific 속성
cache는 HTTP 메시지간 상호 저장 및 호출이 불가한 request-specific이 기본적인 속성이다. 다시 말해 HTTP POST 요청으로 cache에 데이터를 저장한 뒤, 곧바로 다른 HTTP GET 요청으로 cache에 접근하여 key값으로 데이터를 조회할려고하면 조회가 안된다. Cache는 기본적으로 request-specific 하다는 것을 기억하고, 상태 유지가 필요하다면 해당 결과를 데이터 베이스에 주기적으로 저장해놓는 것이 중요하다.
'Programming-[Backend] > Django' 카테고리의 다른 글
API Throughput, health check fail: async 요청이 한 번에 많이 들어올 때 (0) | 2023.10.29 |
---|---|
[TIL] Django Restframework Exception Handler 개요 (0) | 2023.04.16 |
[TIL] Django ListSerializer 활용, List Update/Create (0) | 2023.03.20 |
[TIL] django, MYSQL, postgresql db collation (0) | 2023.02.15 |
[TIL] DjangoFilter(DRF filter_bakcends, django-filter filterset_class) (0) | 2023.01.16 |