Обработка кэша с постоянным изменением социальной сети

#python #django #caching #django-rest-framework

#python #django #кэширование #django-rest-framework

Вопрос:

Использование Django на Python (w / Rest framework) для создания приложения, похожего на Twitter или Instagram.

Каков наилучший способ справиться с кэшированием содержимого (данных JSON, Изображений и т. Д.), Учитывая постоянно меняющийся характер социальной сети? Как по-прежнему отображать обновленное состояние, когда пользователь создает новое сообщение, ставит лайки / комментирует сообщение или удаляет сообщение, сохраняя при этом кэширование содержимого для повышения производительности?

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

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

Комментарии:

1. Это очень общий вопрос, все зависит от трафика вашего сайта и отношений ваших объектов, как правило, даже на сайтах с высоким трафиком частичное кэширование должно повысить вашу производительность, вам не нужно кэшировать все, просто кэшировать дорогостоящие запросы, есть много вариантов кэширования, основанных на времени, частичные, основанные на сигналах и т. Д… все они зависят от потребностей вашего проекта.

2. @petkostas спасибо за ваш комментарий. Как справиться с эффективным кэшированием дорогостоящих запросов, когда возвращаемые ими данные часто меняются из-за взаимодействия с пользователем? Можете ли вы указать мне правильное направление для моих исследований?

3. Я не знаю, как часто меняется ваш пользовательский кеш, каково среднее время? если время действительно мало, то кэш, подобный varnish, будет иметь больше смысла, опять же, если вам нужно обслуживать много запросов, тогда вам нужно будет рассмотреть сегментирование БД и маршрутизатор БД в django.

Ответ №1:

Одним из методов является ввод URL-адресов в контент медиа, на которые они ссылаются. Например, если вы размещаете изображения, используйте хэш sha файла изображения в URL /images/<sha> .

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

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