공부공간

Django 환경에서 Redis로 Caching하기 본문

Python/Django

Django 환경에서 Redis로 Caching하기

개발자가될수있을까? 2020. 10. 2. 17:00

요즘은 싸피에서 Django기반의 RESTful API를 제작하면서 DB부하를 줄이기 위한 노력을 하고있다.

 

간단하면서도, 강력한 Caching기법을 이용하여 시간을 줄여보고자한다.

 

오늘사용할 캐싱서버

 

Redis는 Key-Value 쌍으로 Caching을 지원한다 -> 시간복잡도도 O(1)에 처리하면서 상당히 쉽다.

 

먼저 Docker Image를 이용하여 Redis 서버를 띄우고 Django에서 연결해서 구현해보고자 한다. 

(사실방법은 여러가지겠지만, 가장간단하게..)

 

 


Docker에서 Redis 설치하고 Redis-net 띄우기

 

cmd 창을 열고.. ( docker는 v19.03.8입니다 )

 

1 ) docker pull redis:alpine -> docker images 입력후 " redis " 확인

 

2 ) docker network create redis-net 으로 redis network를 만들어준다 , 이후 redis-cli 명령어를 통하여 

redis안에 저장된 캐시들을 보기 위함이다. -> docker network ls 로 " redis-net " 확인

 

3 ) docker run --name djangoredisserver -p 6379:6379 --network redis-net -d redis:alpine redis-server --appendonly yes

 

--name : redis 컨테이너의 이름을 지정해준다

 

-p : port를 지정해주는데 6379를 권장한다.

 

--network : 앞서 정의했던 redis-net 을 써주자

 

컨테이너가 실행중이다 

 

4 ) docker run -it --network redis-net --rm redis:alpine redis-cli -h djangoredisserver 

 

-h 뒤에는 내가 만든 redis 컨테이너의 이름을 넣어주면된다

 

이렇게 진행된다면 ...

 

으로 redis서버가 정상작동한다 이제 django에서 DB에 다녀온 결과를 캐싱한 후 KEY * 명령어를 통하여 저장된 

 

KEY 값들을 조회할 수 있다.

 


DjangSetting 

 

1 ) setting.py에 캐시관련 정보를 추가하자

# Redis Cache
CACHES = {  
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379"
        
    }
}

 

2 ) pip install django-redis로 라이브러리를 설치해주자

 

2가지만 설치하고, View에서 import해주면 사용할수있다.

 

 

 

 Django로 돌아와서 캐싱을 적용할 view에서 

 

from django.core.cache import cache

을통하여 cache를구현해보자

 

사용해볼 기능은 3가지 이다.

 

cache.get(key) -> redis 서버에 key가 있는지?

cache.set(key,valuem, time) -> redis 서버에 key,value를 insert한다 / time초간 유효하다

cache.get_or_set(key , value , time) => 있으면 가져오고 없으면 insert. / time초간 유효하다

 

 

시간측정을 위해 get과 set을 나누어서 시간을 측정해보았다.

캐시를 쓰는 연산은 메타데이터의 코사인 유사도를 구하는 과정이다.

 

 

두가지로 나누어서 시간을 측정해보았다.

 

1 ) redis 적용전

 

평균 0.014~0.015 정도 걸리는것을 볼수있다.

 

2 ) 적용 후 

 

처음에만 오래걸리고 그 이후부터 금방가져오는 것을 확인할 수 있다.

 

추가적으로 redis-cli에서 KEY * 통하여 저장된 KEY를 확인해본다면?

 

: 1 번 캐시서버에 각각의 해당 INDEX로 저장되어있는것을 확인할 수 있다.

 

물론 메타데이터가 적어서 0.01초와 0.001초의 차이가 많이나냐? 라고 말하면 할말은 없지만 

 

은근 빠르게 가져오능 성능을 알 수 있다.

Comments