데이터를 주고받는데 있어 시간적인 부분은 중요한 부분이라고 생각하고
장고에서는 JOIN을 이용해서 미리 캐싱해서 DB에 접근하는 횟수를 줄여준다
하지만 select_related 와 prefetch_related 두가지로는 부족한 부분이 있어
메인으로 사용하는 DB이외에도 NOSQL을 이용하여 주고받는 데이터를
캐싱해서 DB에 접근하는 방식이 아닌 메모리에서 데이터를 가지고 오는 방식을 통해
효율적으로 데이터를 주고 받을 수 있게 된다
MONGO DB 라는 NOSQL은 들어 봤지만
Redis는 처음듣는 단어라 생소했다
우선 실험을 해보기 위해서
brew install redis
레디스를 설치해주고 레디스를 실행시켜줫다
처음 써보는 NOSQL이라 어떻게 달라질지 감이 안잡혔다 🥲
우선 원래 있던 데이터에 django-seed를 사용하여
원래 있던 데이터 총 3000개 정도의 데이터를 만들어 주었고
실험을 하기 위해서 loadtest를 이용했습니다
loadtest -n 10 http://127.0.0.1:8000/spaces
총 500번의 요청을 보냈고 결과는
20초 정도 걸렸다
1초에 24개의 request를 처리한걸 확인할 수 있었다
500명의 사람이 들어오면 20초나 걸리는건가? 생각이 들었고
순수하게 mysql하나의 DB로는 500명도 벅차겠구나 생각했다
와... 대박 ㅋㅋㅋㅋ 좀 놀랐다
우선 결과를 보면 속도는 반이상 줄어들었고, 1초당 해결하는 request도
눈에띄게 늘어났다
Redis를 사용하여 캐싱하고 데이터를 가지고 오게 되면 이렇게까지 되는구나 싶었고,
from django.core.cache import cache
class SpaceView(View):
def get(self, post):
context = cache.get('spaces')
if not context:
spaces = Space.objects.values("id", "name")
context = {}
for i in spaces:
context[f'space_{i["id"]}'] = i
cache.set('spaces', context)
return JsonResponse(context)
우선 첫 테스트를 위해 이렇게 뷰를 짯고
redis에 cache된 데이터가 있다면 가지고 오고 없다면
cache.set을 이용하여 spaces라는 키에 context를 넣어주는 방식이다
만료시간을 정해줄 수 있고, 정해주지 않는다면 영구적으로 저장된다
redis말고도 좋은 방법이 많지 않을까 생각한다
진짜 ㅋㅋㅋㅋ 어마어마한것 같다
왜 뭔가 알아보면 공부할게 더 생길까??
개발자 세계는 너무 신기한 세계인 것같다
Django View 코드를 작성할때 redis를 한번 활용해봐야겠다
더블에스 다녀갑니다^.~