I have to query redis on every request in my Django-app. Where can I put the setup/ connection routine (r = redis.Redis(host='localhost', port=6379)
) so that I can access and reuse the connection without having to instantiate a new connection in my views?
Add this line to Settings file for creating connection,
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient"},"KEY_PREFIX": "example"}
}# Cache time to live is 15 minutes.
CACHE_TTL = 60 * 15
View level Cache, It will cache the query response(data)
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_pageclass TestApiView(generics.ListAPIView):serializer_class = TestSerializer@method_decorator(cache_page(60))def dispatch(self, *args, **kwargs):return super(TestApiView, self).dispatch(*args, **kwargs)
Template level cache,
from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT
from django.shortcuts import render
from django.views.decorators.cache import cache_page
from .services import get_recipes_with_cache as get_recipesCACHE_TTL = getattr(settings, 'CACHE_TTL', DEFAULT_TIMEOUT)@cache_page(CACHE_TTL)
def recipes_view(request):return render(request, 'index.html', {'recipes': get_recipes()})
For any doubts refer this links
- How to cache Django Rest Framework API calls?
- https://github.com/realpython/django-redis-cache
- https://boostlog.io/@nixus89896/setup-caching-in-django-with-redis-5abb7d060814730093a2eebe