Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Как кэшировать используя Redis в приложениях Django

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

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

Введение в Redis и кэширование

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

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

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

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

Установка Redis

Первый шаг - получить Redis и запустить локально на вашем компьютере. Самый простой способ установить Redis через диспетчер пакетов операционной системы:

Вы также можете следовать инструкциям официального сайта Redis.

Загрузите и извлеките Redis 4.0.6 tar следующим образом:

Бинарные файлы, которые теперь компилируются, доступны в каталоге src. Запустите Redis с помощью:

Вы можете взаимодействовать с Redis с помощью встроенного клиента:

Чтобы проверить, запущен ли сервер redis, выполните в терминале следующую команду:

Пример API Django

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

Чтобы использовать Redis в нашем приложении, нам нужно сделать следующее:

  1. Проверить, существуют ли результаты для текущего запроса в кеше.
  2. Если результаты есть в кеше, извлеките их.
  3. Если результатов не существует, извлеките их, сохраните их в кеше и затем пересылайте их запрашивающему объекту.

Требования

  • Django
  • django-redis
  • Redis
  • loadtest

Создаем свой проект

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

Затем активируйте виртуальное окружение и установите требования к проекту.

Создание проекта Django

Создайте новое приложение под названием store, которое будет обрабатывать управление продуктами в нашем магазине.

Добавьте приложение store и rest_framework в список установленных приложений в файле settings.py.

Создание моделей

В store/models.py мы начинаем с создания модели продукта для хранения сведений о продукте следующим образом:

Миграции

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

Создание суперпользователя

Создайте суперпользователя, войдите в панель администратора и заполните базу данных примерами данных, которые мы будем использовать для проведения наших тестов.

Настройка Redis в приложениях Python

Чтобы использовать Redis с приложением Django, нам нужно настроить Redis для хранения данных кэша приложения. Добавьте следующее в файл settings.py:

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

В файле store/views.py добавьте следующий код, который извлекает все продукты, существующие в базе данных.

Настройка URL-адресов

Создайте файл store/urls.py и добавьте в него следующий код.

Нам также необходимо импортировать URL-адреса из приложения users в основной файл django_cache/urls.py.

Давайте проведем тест и посмотрим, как у нас все получилось. Мы будем использовать loadtest. Если вы не знакомы с loadtest, то это инструмент для тестирования производительности.

Установка loadtest как root довольна простая:

Как видно из вышеизложенного, 55 запросов обрабатываются за секунду.

Давайте создадим еще один ендпоинт для извлечения данных после кэширования с помощью Redis. Измените файл users/views.py, чтобы в нем был следующий код:

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

Обновите store/urls.py следующим образом.

Давайте проведем тесты.

В первый раз, когда вы запросите ендпоинт localhost:8000/store/cache, приложение будет запрашивать данные из базы данных и возвращать их, но последующие вызовы на этот URL будут обходить базу данных и делать запрос в кеш, поскольку данные уже доступны будут доступны в нем ,

Заключение

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

Существуют и другие инструменты кеширования, такие как Memcached, похожие на Redis. Однако Redis более популярен, чем Memcached, потому что для настройки и работы в приложениях требуется всего пара минут. Redis имеет более сложные механизмы, поскольку он был описан как «хранилище структур данных», что делает его более мощным и гибким. Redis также имеет большее преимущество, потому что вы можете хранить данные в любой форме.

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.