Python/DRF

[DRF] 간단한 캐싱 기능 구현 하기 (by. redis, DRF)

yubi5050 2022. 11. 19. 07:28

1. Docker redis run & django-redis 설치

Memcached 형태의 Memory DB인 Redis를 Docker로 작동시킨다.

$ docker run -p 6379:6379 redis

 

Django에서 Redis에 접근하기 위한 추가 library를 설치한다.

$ pip install django-redis

 

2. settings.py 작성

django-admin을 이용한 project는 만들었다고 가정

 

CACHES = {
    'default':{
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379',
    }
}

 

3. urls.py 작성

from django.contrib import admin
from django.urls import path
from .views import cachingView


urlpatterns = [
    path('admin/', admin.site.urls),
    path('cachingtest/', cachingView.as_view()),
]

 

4. views.py 작성

Redis를 CACHE_KEY로 조회 하여 CACHE_VALUE로 저장한다. (없으면 None)

해당 코드는 최초 KEY에 접근시 CACHE_KEY에 'DB Value'라는 예제 값이 저장되는 예제이다.

from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status

from django.core.cache import cache

CACHE_KEY = 'category_list'

class cachingView(APIView):
    def get(self, request):
        cache_value = cache.get(CACHE_KEY, None)
        if cache_value == None:
            cache.set(CACHE_KEY, 'DB Value') # key, value, expriation time
            cache_value = 'DB Value'
        return Response({'cache_value' : cache_value}, status=status.HTTP_200_OK)

 

5. Postman API 결과 비교 (캐싱 사용 전/후)

캐싱 사용 전 / 후 로 API를 계속 여러번 날려보면 처음(25ms) => 두번째 이후(11ms)로 감소한 것을 확인 할 수 있다.