Как настроить кэширование redis

Содержание
  1. Как настроить Redis в качестве кэширующего сервера
  2. Настраиваем оптимальную конфигурацию
  3. Кэширование php сессий
  4. Кэширование данных с помощью Redis
  5. Создание быстрого хранилища сеансов для онлайн-приложений с помощью сервиса Amazon ElastiCache for Redis
  6. Введение
  7. Создание кластера Redis
  8. Кэширование сеансов с помощью Redis
  9. Очистка
  10. Шаг 2. Кэширование сеансов с помощью Redis
  11. Основные особенности поведения
  12. Тестирование подключения к Redis
  13. 2.1. Щелкните стрелку, чтобы отобразить подробные сведения о кластере Redis.
  14. 2.2. Скопируйте основной адрес.
  15. 2.3. Настройте переменную среды REDIS_URL в инстансе EC2.
  16. 2.4. В инстансе EC2 откройте интерактивный интерпретатор Python:
  17. 2.5. Теперь выполните эти команды, чтобы протестировать подключение к узлу Redis.
  18. Кэширование сеансов с помощью хэшей Redis
  19. Продолжительность сеансов
  20. Реальные случаи использования и усложненные примеры
  21. Как кэшировать используя Redis в приложениях Django
  22. Введение в Redis и кэширование
  23. Установка Redis
  24. Пример API Django
  25. Требования
  26. Создаем свой проект
  27. Создание проекта Django
  28. Создание моделей
  29. Миграции
  30. Создание суперпользователя
  31. Настройка Redis в приложениях Python
  32. Настройка URL-адресов
  33. Заключение

Как настроить Redis в качестве кэширующего сервера

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

Установка Redis производится в два шага:

  1. Подключение репозитория backports. Версия в стандартном репозитории слишком стара.
  2. Установка командой aptitude install -t jessie-backports redis-server redis-tools

Настраиваем оптимальную конфигурацию

В Debian конфигурационный файл расположен в каталоге /etc/redis/ и называется redis.conf.

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

Печатаем в консоли команду cat /proc/sys/net/core/somaxconn и выставляем соответствующее количество:

Читайте также:  Настроить цифровые каналы дтв

Для более быстрой работы подключаем возможность работы с unix-сокетом.

Ограничиваем максимальное количество подключаемых клиентов. Если необходимо больше 1024-х подключений, также потребуется изменить ограничение на количество одновременно открытых файлов (ulimit).

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

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

Так же, во избежание проблем с работой Redis (пункт 3 руководства, англ), следует отключить функцию ядра Transparent HugePages.

Перезапускаем для вступления изменений в силу.

И добавляем в файл /etc/rc.local следующие строки, чтобы после перезагрузки сервера данная функция была отключена.

Кэширование php сессий

Настроить php на хранение сессий можно несколькими путями, в зависимости от используемой связки.

Напрямую в php.ini

Apache2 и mod_php (в файле виртуального хоста или apache2.conf)

Источник

Кэширование данных с помощью Redis

В чем преимущество redis’а в качестве хранилища кэша?

  • быстрое хранилище в памяти;
  • несколько серверов redis могут быть объединены в кластер;
  • несколько web-серверов могут подключаться к одному серверу redis;
  • можно сбросить кэш на диск, чтобы не потерять его при перезагрузке;
  • различные модели вытеснения лишнего кэша;

В общем redis послужит отличной заменой memcached. Собственно, исходники bitrix/modules/main/classes/general/cache_memcache.php и послужили болванкой для данных экспериментов. Посмотрел в исходники битрикса, обнаружил, что ничего не мешает и все довольно просто.

Итак, для начала устанавливаем redis. (если у вас windows, то можно скачать инсталлятор отсюда https://github.com/MSOpenTech/redis/releases )
Поскольку сервер будет использоваться для хранения кэша данных, то настроим в конфиге максимальный объем используемой памяти:

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

Для работы с redis в PHP необходимо установить расширение https://github.com/phpredis/phpredis (под windows готовые DLL можно взять отсюда http://www.apachelounge.com/viewtopic. php?t=6359 )

Если нет возможности установить дополнительные модули, то можно через composer установить https://github.com/nrk/predis . Использование Predis не требует никаких дополнительных модулей, но надо будет изменить несколько строк в примере. Мне показалось, что работа с скомпилированными библиотеками будет быстрее, чем полностью интерпретаторная реализация общения с редисом.

Создаем php файл (отдельный или в составе собственного модуля) где будет размещаться наш класс ‘CPHPCacheRedis’. В файле .settings, в разделе ‘cache’ вместо строки ‘type’ указываем массив:

к посту приложен устаревший файл (почему-то не удаляется) актуальный модуль выложен на GitHub https://github.com/DimMount/dimmount.rediscache .

Очистка кэша (cleanDir)

При кешировании в битриксе используются три уровня:

  • basedir
  • initdir
  • filename

когда мы в первый раз делаем запись в кэш, то создаются 3 записи:

  • запись с ключом basedir , которая содержит рандомный хэш basedir_version
  • запись с ключом basedir_version . «|» . init_dir , которая содержит рандомный хэш initdir_version
  • и собственно наша запись с ключом basedir_version . «|» . initdir_version . «|» filename , содержащая кэшируемые данные

При массовой очистке кэша, например функцией cleanDir или кнопкой очистки кэша из админки, битрикс поступает следующим образом:

  • очищает запись с ключом basedir_version . «|» . init_dir (в случае с cleanDir)
  • очищает запись с ключом basedir (в случае с «очистить кэш» из админки)

Таким образом записи типа filename остаются «бесхозными» и продолжают висеть в памяти пока не истечет их время жизни или они не будут вытеснены политикой ограничения размера памяти.
Однако redis позволяет получить список ключей по маске, поэтому в моем примере я удаляю все ключи, соответствующие маске удаляемого уровня, а потом уже удаляю саму запись

Источник

Создание быстрого хранилища сеансов для онлайн-приложений с помощью сервиса Amazon ElastiCache for Redis

Введение

Создание кластера Redis

Кэширование сеансов с помощью Redis

Очистка

Шаг 2. Кэширование сеансов с помощью Redis

Чтобы получить общее представление о кэшировании сеансов на стороне сервера, вы выполните внедрение небольшого приложения, используя микроплатформу для веб-разработки на языке Python Flask. Поскольку внимание будет уделяться основным понятиям, а не особенностям конкретной платформы и языка, вы можете транслировать примеры на веб-платформу и язык программирования по своему выбору.

Чтобы начать работу с Flask, следуйте инструкциям по установке и указаниям в руководстве по быстрому запуску.

Ниже приведено очень простое приложение, с помощью которого выполняются вход в систему и выход из нее:

Остальные примеры будут основаны на этом фрагменте. Код для всех примеров находится в этом репозитории.

Если приложение Flask установлено и его требуется загрузить, скопируйте код в файл с именем example-1.py. Затем необходимо экспортировать две переменные среды: для FLASK_APP следует установить значение example-1.py, а для SECRET_KEY – строку произвольных символов, например Y0PJWblKsg1axM4fGW. Если требуется помощь при настройке переменных среды, см. руководство по быстрому запуску приложения Flask.

После настройки выполните следующую команду:

Затем перейдите по адресу http://your_flask_endpoint:5000, где можно посмотреть, как работает приложение. Заполнитель your_flask_endpoint необходимо заменить публичным именем DNS вашего инстанса EC2, как и в разделе «Требования».

Доступны три маршрута: «/», /login и /logout. Перейдите к каждому из них по очереди и ознакомьтесь с основными особенностями их поведения.

Время прохождения модуля: 60–90 минут

Основные особенности поведения

В примере используется файл cookie для сохранения имени пользователя. При первом использовании приложения в объекте сеанса нет сохраненного имени пользователя. При переходе к маршруту /login и указании имени пользователя значение сохраняется в подписанном файле cookie, а вы перенаправляетесь на главную страницу. Затем при переходе к маршруту /logout, имя пользователя удаляется из сеанса, а вы возвращаетесь к месту начала работы.

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

Тестирование подключения к Redis

2.1. Щелкните стрелку, чтобы отобразить подробные сведения о кластере Redis.

(Нажмите, чтобы увеличить изображение.)

2.2. Скопируйте основной адрес.

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

(Нажмите, чтобы увеличить изображение.)

2.3. Настройте переменную среды REDIS_URL в инстансе EC2.

2.4. В инстансе EC2 откройте интерактивный интерпретатор Python:

2.5. Теперь выполните эти команды, чтобы протестировать подключение к узлу Redis.

Зависание команды означает, что выполнение блокируется параметрами группы безопасности. Убедитесь, что у инстанса EC2 есть доступ к группе безопасности, назначенной инстансу ElastiCache. Допустим, ваш инстанс EC2 был назначен стандартной группе безопасности. Теперь вы можете изменить группу безопасности инстанса Amazon ElastiCache и добавить настраиваемое правило TCP, которое разрешает подключения через порт 6379 от любого инстанса из стандартной группы безопасности:

В поле «Источник» можно начать вводить имя группы безопасности, а затем выбрать ее идентификатор из списка. Дополнительные сведения о группах безопасности можно найти в документации или справочнике по правилам групп безопасности.

Кэширование сеансов с помощью хэшей Redis

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

Теперь хранилище Redis импортировано и инициализировано, а индекс увеличивает показания счетчика и отображает их пользователю.

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

Продолжительность сеансов

Теперь вы зададите время жизни (TTL) сеанса на стороне сервера. Это всего лишь одна дополнительная строка кода, а фрагмент будет включать только маршрут «/».

Время действия ключа, в котором сохранен сеанс, истекает через 10 секунд. Это очень короткое время жизни, используемое только для этого примера. Если запустить приложение сейчас, можно увидеть, как индекс обновляет счетчик посещений. Но если не посещать эту страницу в течение 10 секунд, при следующем обновлении счетчик вернется к значению «1».

Реальные случаи использования и усложненные примеры

Этого короткого примера достаточно для изучения основ сеансов на стороне сервера, но в реальной обстановке вы поступите по-другому: после аутентификации пользователя вы не будете сохранять его имя, а сгенерируете и сохраните токен. Этот токен будет представлять собой ключ Redis, в которым будут храниться все данные сеанса на стороне сервера. Вы также можете отменить некоторые представленные здесь операции, чтобы при каждом доступе к сеансу на стороне сервера время TTL обновлялось без вашего участия. В репозитории вы найдете пример, в котором предоставляется класс SessionStore для отмены такого поведения.

Источник

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

Одним из способов уменьшить нагрузку на сервер является кеширование данных. Это делается путем кэширования данных после их обработки и последующего получения из кэша при следующем запросе. В этом учебнике дается подробное обсуждение 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 также имеет большее преимущество, потому что вы можете хранить данные в любой форме.

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

Источник

Оцените статью