feat: implemented Redis caching for user data

This commit is contained in:
Chneemann 2025-03-25 08:40:36 +01:00
parent fb2867ccd9
commit 61ab0d9bbb
2 changed files with 26 additions and 2 deletions

View file

@ -22,3 +22,12 @@ def get_cached_user(user_id):
return json.loads(user_data)[0]['fields'] return json.loads(user_data)[0]['fields']
else: else:
return None return None
def cache_user(user_id, user_data, timeout=3600):
"""
Saves user data in the cache.
"""
cache_key = f"user_{user_id}"
user_json = json.dumps(user_data)
cache.set(cache_key, user_json, timeout)

View file

@ -1,7 +1,22 @@
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response
from .models import User from .models import User
from .serializers import UserSerializer from .serializers import UserSerializer
from .caching import get_cached_user, cache_user
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all() queryset = User.objects.all()
serializer_class = UserSerializer serializer_class = UserSerializer
def retrieve(self, request, *args, **kwargs):
user_id = kwargs.get("pk")
cached_user = get_cached_user(user_id)
if cached_user:
return Response(cached_user)
user = self.get_object()
serialized_user = UserSerializer(user).data
cache_user(user_id, serialized_user)
return Response(serialized_user)