본문 바로가기
Django

Django에서 memcached 사용하기 (우분투, 윈도우)

by Django_ 2020. 6. 17.
반응형

이전에 작성한 캐시의 중요성을 깨닫는다는 글을 이어서 쓰려고 하는데

이전 포스팅을 다시보니 해당문제는 캐시의 문제는 아니였던것 같습니다.;;;

항상 이전에 작성한 코드를 다시 읽으면 잘못된것만 같고 왜 저렇게 했나 하는 느낌이네요 ㅎ

 

캐시의 중요성을 깨닫..다

Django를 공부하면서 개발까지 모든 걸 혼자 해야 하다 보니 우선순위를 정해서 진행할 수밖에 없었네요;; 처음 python을 배우고 > Django를 배우고 > HTML, CSS, Javascript를 배우고 > ubuntu 과정으로 학습하

install-django.tistory.com

 

 

이번에는 최적화를 시도해보기위해 캐싱을 사용해보기로했습니다.

노가다로 django와 제이쿼리로 상품의 셀렉트 할때마다 금액과 안내 이미지를 불러오는데 상품 안내 이미지의 경우 거의 변동이 없는데 계속 DB에 qeury를 날리는 것이 거슬렸습니다.

항상 정적인것도아닌것이, 항상 변하는것도 아닌 애매한 그런 것이였습니다.

저는 캐싱을 위해 memcached를 사용했습니다. redis와 가장 많이 고민하시는것 같습니다.

더 적은 memory를 사용하고 메모리에 캐싱된 데이터가 날아가도 크게 상관는 데이터기때문에 사용하기로했습니다.

그래서 슥~ 검색해보고 바로 설치를 했죠

pip install python-memcached

 

그리고 settings.py 에는

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

그리고 바로 사용을 해봤습니다.

cache_key = 'test.cache_key'
test = cache.get(cache_key)
cache_time = 300

if not test:
	test = models.Test.objects.all()
	cache.set(cache_key, test, cache_time)

하지만 계속 캐시가 기록되지 않는것이였습니다.;;;

그리고 무엇보다 cache.get( ) 하는 순간 딜레이가 2초정도 발생하였습니다.

음... 왜이런거지 뭐가 잘못된거지.....

역시 문서를 대충보면 안되는것이였습니다.

Install Memcached Server 

memcached가 구동되는 서버 환경에 memcached 설치되어야하는것이였습니다.

쉽게 말하자면 윈도우로 개발하는경우 윈도우에 memcached가 설치가 되어있어야하고

우분투 서버를 돌리는 경우 우분투 서버에 memcached 설치가 되어있어야합니다.

너무 당연한것인데 django의 기능이라고만 생각을 했네요;; 

하지만 윈도우를 개발 컴퓨터로 쓰시는 경우는 설치하는데 약간 복잡합니다.;;

윈도우 설치는 여기 자세한 설치방법이 있으니 참고하세요~

 

저는 그냥 우분투에서만 사용하기로 결정했습니다.

 

# 우분투에서
sudo apt-get update
sudo apt-get install memcached

apt-get 에서 -get을 생략하셔도 됩니다.

이제 다시 테스트~!

 

오 작동이 되는지 안되는지.... 보이지 않으니 알수가 없습니다 ㅎㅎ

하지만 작동은 잘되는것같습니다. 새로운 이미지로 업데이트했는데 바로 적용이 안되더라고요

그러다 문득 이런생각이 들었습니다. 쿼리는 줄였어도 쿼리셋이라 메모리를 엄청나게 잡아먹고 있는건 아닐까하는 생각이 들었습니다.

 

그럼 그냥 찍어보면 되죠! ㅎ

import sys

print(sys.getsizeof(cache.get(cache_key)))


56

56 byte를 차지하는것을 확인하여 안심하고 사용하기로 했습니다.

 

당연히 상황마다 쿼리마다 다르겠죠??

 

이번에 자세히 확인해보면서 알게된것은

대부분 커뮤니티에서 정적이면서 간단한 캐싱이 아닌경우 redis를 사용하라는 반응인것 같습니다~

아무래도 다양한 데이터포맷과 API를 지원하기때문인것같습니다. 디스크에 데이터를 기록하기도 하고요

다음에는 redis를 사용하는 상황이 생기면 사용법에 대해 포스팅해보겠습니다.

반응형

댓글