Django, Redis и кэширование изображений для улучшения масштабируемости

Итак, я работаю с EC2, S3bucket и кластером Redis.

Идея заключается в том, что изображение сохраняется в кэше и извлекается из кэша перед отправкой в мой S3bucket, который очень требователен.

Я уже могу кэшировать и извлекать, так как я пробовал просто кэшировать url изображения S3.

Все хорошо до этого момента, но это не делает ответ быстрее или, по крайней мере, не заметно быстрее.

Итак, решением здесь является хранение самого изображения, и вот как я это делаю.

def get_description(self, obj):
    image_key = f"category_img_ccc{obj.pk}"
    image_b64 = cache.get(image_key)
    if not image_b64:
        illustration_image = obj.description
        if illustration_image:
            image_url = illustration_image.url
            response = requests.get(image_url, stream=True)
            image = response.content
            image_b64 = base64.b64encode(image)
            cache.set(image_key, image_b64, None)
    if image_b64:
        return image_b64.decode("utf-8")
    else:
        return None

Затем фронтенд должен закодировать его и вывести правильное изображение

Ответ выглядит очень некрасиво, как вы можете себе представить, декодированное изображение представляет собой довольно длинную строку char.

Так ли это?

Может ли кто-нибудь пролить свет в этом отношении, пожалуйста.

Вернуться на верх