Django Cache + Запрос базы данных Django

Я создаю веб-приложение Django, которое позволяет пользователям выбирать фотографию в компьютерной системе и продолжать заполнять ее на временной шкале. Временная шкала сначала будет отображать 10 фотографий, а затем обновится, чтобы получить следующие 10 фотографий на временной шкале.

Итак, мой первый вопрос - я могу загружать изображения, которые сохраняются в файловой системе, но как мне показать только первые 10, а затем вытащить обновление, чтобы получить следующие 10, и так далее.

Далее, я хочу, чтобы пользовательский опыт приложения был быстрым. Итак, я рассматриваю кеширование. Итак, я думал, что я кеширую. Так как в Django есть 3 типа кеша Database cache, MemCache, or FileSystem Caching, Итак, мой второй вопрос: я должен кэшировать первые 10 фотографий каждого пользователя или что-то еще?

Пожалуйста, ответьте с вашими предложениями.

2 ответа

Решение

Итак, мой первый вопрос - я могу загружать изображения, которые хранятся в файловой системе, но как мне показать только первые 10, а затем вытащить обновление, чтобы получить следующие 10, и так далее.

Получите первые 10 с вашей первоначальной логикой, найдите следующие фотографии в хронологическом порядке. У вас должна быть некоторая временная метка, связанная с размещением вашей фотографии. Получить изображения в соответствии с этим. Вы можете использовать Django Paginator за это.

что я кеширую

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

я должен кэшировать первые 10 фотографий каждого пользователя или что-то еще

Зависит от тебя. Эти первые картинки являются общими для всех пользователей? Тогда вы можете кешировать. Если нет и изображения зависят от пользователя, то нет смысла их кэшировать. Пользователь в любом случае должен будет получить первые изображения. И я очень сомневаюсь, что пользователь будет часто просить одни и те же первые 10 фотографий. Опять же, это ваша логика. Если вы думаете, что кеширование поможет, вы можете пойти дальше и кешировать.

Проект DiskCache был впервые создан для аналогичной проблемы (кэширование изображений). Он включает в себя несколько функций, которые помогут вам эффективно кэшировать и обслуживать изображения. DiskCache является лицензированной библиотекой дискового и файлового кэша Apache2, написанной на чистом Python и совместимой с Django.

diskcache.DjangoCache предоставляет Django-совместимый интерфейс кеша с несколькими дополнительными функциями. В частности, get а также set методы позволяют читать и писать файлы. Пример:

from django.core.cache import cache

with open('filename.jpg', 'rb') as reader:
    cache.set('filename.jpg', reader, read=True)

Позже вы можете получить ссылку на файл:

reader = cache.get('filename.jpg', read=True)

Если вам просто нужно имя файла на диске (в кеше):

try:
    with cache.get('filename.jpg', read=True) as reader:
        filename = reader.name
except AttributeError:
    filename = None

Приведенный выше код запрашивает файл из кэша. Если такого значения нет, оно вернется None, None приведет к возникновению исключения with заявление, потому что ему не хватает __exit__ метод. В этом случае исключение поймано и filename установлен в None,

С именем файла вы можете использовать что-то вроде X-Accel-Redirect, чтобы указать Nginx, что файл должен обслуживаться напрямую с диска.

Другие вопросы по тегам