일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 세그먼트트리
- 이젠 골드구현도 어렵네..
- spring
- java
- 우선순위큐
- 재귀함수
- 알고리즘
- 시뮬레이션
- 게더타운시작
- BFS
- GatherTown
- YBMCOS
- PS
- 백준코딩테스트
- 01BFS
- 다익스트라
- DFS
- COSPRO
- 완전탐색
- 자바PS
- 네트워크플로우
- deque
- 구현
- 취득후기
- 엘라스틱서치
- QUICKSTARTGUIDE
- 다이나믹프로그래밍
- dp
- COSPROJAVA1급
- 백준
- Today
- Total
공부공간
Django 환경에서 Redis로 Caching하기 본문
요즘은 싸피에서 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 적용전
2 ) 적용 후
추가적으로 redis-cli에서 KEY * 통하여 저장된 KEY를 확인해본다면?
: 1 번 캐시서버에 각각의 해당 INDEX로 저장되어있는것을 확인할 수 있다.
물론 메타데이터가 적어서 0.01초와 0.001초의 차이가 많이나냐? 라고 말하면 할말은 없지만
은근 빠르게 가져오능 성능을 알 수 있다.