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 = ''
제대로 캐싱이 되는것을 확인.
'까벨로퍼 > 개발 이야기' 카테고리의 다른 글
[flutter] 다국어 처리하기 (0) | 2020.07.22 |
---|---|
[Swift] 버전 빌드 정보 가져오기 (0) | 2020.07.22 |
[NET-SNMP] snmp v3 Unknown engine ID 이슈 (0) | 2020.07.17 |
[Linux/Unix] GLIBC 버전 확인하기 (0) | 2020.07.16 |
CentOS7 Django 외부접속 오류시 (0) | 2020.07.15 |