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.
Так ли это?
Может ли кто-нибудь пролить свет в этом отношении, пожалуйста.