From 1a084e2d38c7d9b615963d2d4b266a5aae951f86 Mon Sep 17 00:00:00 2001 From: Ashwin Rajeev Date: Fri, 17 Aug 2018 20:59:46 +0530 Subject: [PATCH 1/2] add caching for mapdata --- .env.example | 2 ++ floodrelief/settings.py | 15 ++++++++++++++- mainapp/views.py | 13 ++++++++++--- requirements.txt | 1 + 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 500d6d27f..b8f69e16c 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,6 @@ SECRET_KEY=1 ALLOWED_HOSTS=localhost SENTRY_DSN="" B_DATABASE_URL="postgres://rescueuser:password@localhost/rescuekerala" +REDIS_URL=redis://localhost:6379 +CACHE_TIMEOUT=60 DEBUG=true diff --git a/floodrelief/settings.py b/floodrelief/settings.py index e28a0d495..7d7f85fcb 100644 --- a/floodrelief/settings.py +++ b/floodrelief/settings.py @@ -20,7 +20,8 @@ def get_list(text): env = environ.Env( # set casting, default value - DEBUG=(bool, False) + DEBUG=(bool, False), + CACHE_TIMEOUT=(int, 60) ) # reading .env file root = environ.Path(__file__) - 2 @@ -108,6 +109,18 @@ def get_list(text): DATABASES = {} DATABASES['default'] = dj_database_url.parse(env('B_DATABASE_URL'), conn_max_age=600) +CACHES = { + "default": { + "BACKEND": "django_redis.cache.RedisCache", + "LOCATION": env('REDIS_URL'), + "OPTIONS": { + "CLIENT_CLASS": "django_redis.client.DefaultClient" + }, + "KEY_PREFIX": "keralarescue" + } +} +CACHE_TIMEOUT = env('CACHE_TIMEOUT') + # Password validation # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators diff --git a/mainapp/views.py b/mainapp/views.py index 30a037de2..d5fbf3b3a 100644 --- a/mainapp/views.py +++ b/mainapp/views.py @@ -13,6 +13,8 @@ from django.contrib.auth import logout from django.shortcuts import redirect from django.db.models import Count +from django.core.cache import cache +from django.conf import settings class CreateRequest(CreateView): model = Request @@ -168,11 +170,16 @@ class Maintenance(TemplateView): def mapdata(request): - if("district" in request.GET.keys()): - data = Request.objects.exclude(latlng__exact="").filter(district = request.GET.get("district")).values() + district = request.GET.get("district", "all") + data = cache.get("mapdata:" + district) + if data: + return JsonResponse(list(data) , safe=False) + if district != "all": + data = Request.objects.exclude(latlng__exact="").filter(district=district).values() + cache.set("mapdata:" + district, data, settings.CACHE_TIMEOUT) else: data = Request.objects.exclude(latlng__exact="").values() - + cache.set("mapdata:" + district, data, settings.CACHE_TIMEOUT) return JsonResponse(list(data) , safe=False) def mapview(request): diff --git a/requirements.txt b/requirements.txt index 4de17eecb..0b3a97936 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ psycopg2==2.7.5 pytz==2018.5 raven==6.9.0 whitenoise==4.0 +django-redis==4.9.0 From 8c9399e59e0a8f6377bfd68afcf094d9ff38b84f Mon Sep 17 00:00:00 2001 From: Ashwin Rajeev Date: Fri, 17 Aug 2018 21:19:06 +0530 Subject: [PATCH 2/2] cleanup code --- mainapp/views.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mainapp/views.py b/mainapp/views.py index d5fbf3b3a..ecb1642b2 100644 --- a/mainapp/views.py +++ b/mainapp/views.py @@ -176,10 +176,9 @@ def mapdata(request): return JsonResponse(list(data) , safe=False) if district != "all": data = Request.objects.exclude(latlng__exact="").filter(district=district).values() - cache.set("mapdata:" + district, data, settings.CACHE_TIMEOUT) else: data = Request.objects.exclude(latlng__exact="").values() - cache.set("mapdata:" + district, data, settings.CACHE_TIMEOUT) + cache.set("mapdata:" + district, data, settings.CACHE_TIMEOUT) return JsonResponse(list(data) , safe=False) def mapview(request):