From 65a018d113783bcb2e597a686ed156f1efa33329 Mon Sep 17 00:00:00 2001 From: limjihoon99 Date: Thu, 20 Jul 2023 14:42:07 +0900 Subject: [PATCH] =?UTF-8?q?[#26]Feat:=20Data=20Redis=20=EC=BA=90=EC=8B=B1?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/config/settings.py | 10 ++++++++++ backend/data/views.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/backend/config/settings.py b/backend/config/settings.py index 71c95c5..dfb30c7 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -167,3 +167,13 @@ PROMETHEUS_EXPORT_MIGRATIONS = False +# Cache +CACHES = { + "default": { + "BACKEND": "django_redis.cache.RedisCache", + "LOCATION": "redis://127.0.0.1:6379/1", # 1번 DB + "OPTIONS": { + "CLIENT_CLASS": "django_redis.client.DefaultClient", + } + } +} diff --git a/backend/data/views.py b/backend/data/views.py index 9d3cb57..3d085c9 100644 --- a/backend/data/views.py +++ b/backend/data/views.py @@ -2,6 +2,7 @@ from rest_framework.decorators import api_view from apscheduler.schedulers.background import BackgroundScheduler from django.contrib.auth.models import User +from django.core.cache import cache from datetime import timedelta import datetime as dt from django.utils import timezone @@ -11,12 +12,17 @@ from .serializers import DataSerializer from data.scheduler_crawling.crawling import run_libreView_process - -scheduler = BackgroundScheduler() +import hashlib @api_view(['GET']) def get_data(request, pet_id): + cache_key = f'get_data:{pet_id}' + cached_data = cache.get(cache_key) + + if cached_data: + return Response(cached_data) + data_list = [] code_number = codeNumber.objects.get(pet_id=pet_id) queryset = Data.objects.filter(code=code_number.device_num) @@ -33,11 +39,18 @@ def get_data(request, pet_id): data_list.append(serializer.data) response_data = {'data_list': data_list} + cache.set(cache_key, response_data, timeout=3600) # 데이터를 1시간 동안 캐싱합니다 return Response(response_data) @api_view(['GET']) def get_one_day_data(request, pet_id): + cache_key = f'get_one_day_data:{pet_id}' + cached_data = cache.get(cache_key) + + if cached_data: + return Response(cached_data) + one_day_data_list = [] code_number = codeNumber.objects.get(pet_id=pet_id) one_day_queryset = Data.objects.filter(code=code_number.device_num) @@ -59,11 +72,18 @@ def get_one_day_data(request, pet_id): one_day_data_list.append(serializer.data) response_data = {'time_range_data_list': one_day_data_list} + cache.set(cache_key, response_data, timeout=3600) # Cache the data for 1 hour return Response(response_data) @api_view(['GET']) def get_one_week_data(request, pet_id): + cache_key = f'get_one_week_data:{pet_id}' + cached_data = cache.get(cache_key) + + if cached_data: + return Response(cached_data) + one_week_data_list = [] code_number = codeNumber.objects.get(pet_id=pet_id) one_week_queryset = Data.objects.filter(code=code_number.device_num) @@ -85,11 +105,18 @@ def get_one_week_data(request, pet_id): one_week_data_list.append(serializer.data) response_data = {'time_range_data_list': one_week_data_list} + cache.set(cache_key, response_data, timeout=3600) # Cache the data for 1 hour return Response(response_data) @api_view(['GET']) def get_one_month_data(request, pet_id): + cache_key = f'get_one_month_data:{pet_id}' + cached_data = cache.get(cache_key) + + if cached_data: + return Response(cached_data) + one_month_data_list = [] code_number = codeNumber.objects.get(pet_id=pet_id) one_month_queryset = Data.objects.filter(code=code_number.device_num) @@ -111,6 +138,7 @@ def get_one_month_data(request, pet_id): one_month_data_list.append(serializer.data) response_data = {'time_range_data_list': one_month_data_list} + cache.set(cache_key, response_data, timeout=3600) # Cache the data for 1 hour return Response(response_data) @api_view(['POST'])