이전에 작성한 캐시의 중요성을 깨닫는다는 글을 이어서 쓰려고 하는데
이전 포스팅을 다시보니 해당문제는 캐시의 문제는 아니였던것 같습니다.;;;
항상 이전에 작성한 코드를 다시 읽으면 잘못된것만 같고 왜 저렇게 했나 하는 느낌이네요 ㅎ
이번에는 최적화를 시도해보기위해 캐싱을 사용해보기로했습니다.
노가다로 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를 사용하는 상황이 생기면 사용법에 대해 포스팅해보겠습니다.
'Django' 카테고리의 다른 글
Django image URL을 통해 model에 저장하기 (0) | 2021.05.18 |
---|---|
Django 다수 업데이트할때 bulk_ 활용하기 (0) | 2021.01.03 |
[CRITICAL] WORKER TIMEOUT (pid:00000) (0) | 2020.05.27 |
Out of range value for column (SQLite is working but MySQL is not working) (0) | 2020.05.18 |
request로 전송받은 csv file 바로 읽고 데이터베이스 저장 (0) | 2020.05.11 |
댓글