django + redis 조합으로 쿼리 성능 향상 시키기!
터미널에서
$ brew install redis
위의 명령어로 redis 설치하기
설치 후
$ cd /usr/local/etc
위의 경로에 들어가서
$ vi redis.conf
파일 열기
requirepass foobared
라고 되어 있는 부분 찾아서
requirepass 내가 설정하려는 비밀번호로
ex. requirepass abcde
-------------------------------------
bind 127.0.0.1 로 되어 있는 부분 찾아서
bind 0.0.0.0 으로 수정해주기
:wq! <- 명령어로 파일 저장 후 나오기
$ redis-server
위의 그림처럼 나오면 성공!
터미널 하나 더 키고,
$ redis-cli
입력하면 아래와 같이 나온다.
레디스 키에 저장된 값이 없어서 조회해보면 empty array로 나온다.
# project파일/settings.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
위의 내용 넣어주기
# 앱/views.py
import redis
from django.core.cache import cache
class ServiceType(APIView):
def get(self,request):
types = request.GET.get("type", None)
start = time.time()
today = datetime.datetime.now().date()
if types == 'E' or types == 'N':
get_redis = cache.get('test')
if not get_redis:
eventlist = Event.objects.filter( type=types)
contentslist = []
for contents in eventlist:
if contents.active == 'Y':
if types == 'E':
if contents.end_date > today:
badge = f'{contents.end_date.month}/{contents.end_date.day}까지'
else:
badge = '종료'
elif types == 'N':
badge = contents.badge
contentslist.append ( {
'id' : str(contents.id),
'title' : contents.title,
'badge' : badge,
'startDate' : contents.start_date
} )
data = {
'contentsList' : contentslist
}
cache.set('test', data)
end = time.time()
print('레디스에 키 없을 때 조회 시간 : ', end-start)
return BaseResponse(resultcode=int('00'), data=data, status=200)
end = time.time()
print('레디스에 키 있을 때 조회 시간 : ', end-start)
return BaseResponse(resultcode=int('00'), data=get_redis, status=200)
return BaseResponse(resultcode=int('01'), status=400)
9번째 & 10번째 줄에
get_redis = cache.get('event4') if not get_redis:
를 추가해서, 레디스에 내가 저장해 놓은 키값이 있는지 찾은 후 (get 이 조회하는 명령어)
있다면 get_redis 그대로 return
없다면, DB에서 조회 후, 해당 키 값으로 레디스에 저장하기 (set이 저장)
레디스에 키가 없는 상태기 때문에 데이터 조회하는 코드로 데이터 조회 후, 레디스에 키 저장한 후, 데이터 리턴
redis-cli 에서 keys * 로 조회해보면 위의 실행으로 키가 저장된 걸 알 수 있다.
그리고 다시 조회 해보면,
레디스에 저장된 키 값으로 데이터를 찾아서 리턴하면서 시간이 단축된 걸 알 수 있다.