본문 바로가기
관리자

Programming-[Backend]/Django

[TIL] Django Cache 개요

728x90
반응형

 

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 하다는 것을 기억하고, 상태 유지가 필요하다면 해당 결과를 데이터 베이스에 주기적으로 저장해놓는 것이 중요하다.

728x90
반응형