Django 에 캐싱을 적용해 보자

 

dataframe 타입의 1000건 이상의 레코드를 DB에서 읽어 웹페이지에 계속 뿌려주는 케이스가 있는데, 

굳이 하루에 한번만 요청에 의해서 DB에 갔다오면 될 듯 하여 캐싱을 적용하기로 했습니다.

 

 

setting.py 에 추가

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:6379',
    }
}

 

웹서버 실행 시 아래의 오류가 발생한다면

ModuleNotFoundError: No module named 'memcache'

python-memcached 모듈 설치

$ pip install python-memcached

 

views.py 코드에서

key_mydf = 'key_finance'
df = cache.get(key_mydf)

if df is None:
  
  ''' 여기서 부터 DB작업 '''
  
  
  cache.set(key_mydf, df, 86400)
  # 864000 은 하루만큼의 초(sec)

  ''' 중략 '''
  
return render(request, 'finance.html', {'df': df})

- 캐시에 df 가 적재되어 있지 않으면 DB 작업을 통해 데이터를 가져온 후 캐시에 저장한다

- 다음 요청부터 캐시의 데이타를 사용한다

- 하루가 지나면 캐시는 해제된다.

 

 

추가 - 혹시 캐싱이 제대로 안되는 경우 

- 새로 서버를 구축한 후 로그 출력해서 확인 해본 결과 위 내용으로 제대로 캐싱이 먹히지 않았다. 

  캐싱이 안될경우 setting.py 의 middleware 에 아래 두줄 추가하고 

    MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
    ]

같은 setting.py 파일에 아래 4줄을 추가해준다. 

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHE_MIDDLEWARE_ALIAS = 'default'  # which cache alias to use
CACHE_MIDDLEWARE_SECONDS = 600    # number of seconds to cache a page for (TTL)
CACHE_MIDDLEWARE_KEY_PREFIX = ''

제대로 캐싱이 되는것을 확인.

 

 

 

 

 

 

 

 

+ Recent posts