Redis с PHP - реализация кэширования данных - PullRequest
4 голосов
/ 28 января 2012

Я установил redis на свой сервер и реализовал кэширование объектов для данных, возвращаемых в веб-приложении на основе PHP.Модель php по существу выполняет достаточно сложный запрос и возвращает подробный массив данных.Я проверил кеширование и обнаружил, что все работает как положено.Сначала я проверяю, существует ли ключ в Redis.Если это так, redis возвращает данные, модель десериализуется и возвращает ранее кэшированные данные.Если срок действия кэша истек, модель выполняет запрос sql, возвращает данные и устанавливает ключ и сериализованное значение в redis.

Итак, вот мои вопросы.

  1. Я не уверен, как действительно сравнить это, поскольку все это основано на браузере.Какие есть инструменты, которые позволили бы мне получить разумный эталон для сравнения кэширования, а не кэширования.Я имею в виду, возможно, PHP-скрипт, который вызывает API 1000 раз с помощью curl.

  2. Я реализовал это в Redis, потому что я однажды прочитал, что кэширование с Redis будет работать на нескольких сессиях или IPадреса доступа к сайту.Например, если к API обращаются 1000 раз в час через несколько ip-адресов / пользователей, я предполагаю, что этот подход уменьшит нагрузку на сервер mysql и позволит redis вместо этого выполнять возврат кэшированных данных.Может кто-нибудь пролить некоторый свет на это?Мои предположения верны?

Все комментарии приветствуются!

Спасибо!

Дэйв

Ответы [ 2 ]

7 голосов
/ 30 января 2012

Для сравнения веб-сайта я бы использовал что-то вроде Siege вместо написания определенного сценария PHP.

Что касается использования Redis, то кеширование в таких хранилищах в памяти, как memcached или Redis, теперь очень распространено. И memcached, и Redis подходят для этой цели, хотя для чистого кэширования memcached, возможно, проще в настройке. 1000 раз в час - это всего 3,6 TPS - любое хранилище данных (включая MySQL) будет поддерживать такой трафик без каких-либо проблем. Теперь умножьте этот трафик на 100 или 1000, и уровень кэширования (memcached или Redis) станет обязательным для защиты вашей базы данных.

Чтобы использовать Redis для кэширования, вы можете проверить команду EXPIRE и взглянуть на параметр maxmemory-policy в файле конфигурации.

0 голосов
/ 17 января 2013

Я провел расширенное тестирование бэкэндов кеша для библиотеки Zend_Cache. Тесты проводились с использованием нескольких процессов php-cli и рандомизированных данных и учитывали производительность чтения, производительность записи и производительность очистки тегов кэша. Если тестирование только бэкэнда кеша производительности веб-сервера не имеет значения, поэтому я рекомендую тестировать через CLI, чтобы упростить тестирование. Кроме того, тестирование только одним процессом не даст вам точной картины характеристик бэкэнда при большой нагрузке.

MySQL сам по себе очень быстрый, и если вы выполняете индексированные запросы с одной записью, то собственный кэш запросов MySQL будет очень быстрым. Я бы порекомендовал добавить дополнительный слой кэширования только для медленных задач (агрегированные результаты нескольких запросов или генерация фрагментов HTML). Вы можете использовать Zend_Cache, не включая всю среду Zend, поэтому я настоятельно рекомендую вам проверить Cm_Cache_Backend_Redis и Cm_Cache_Backend_File .

...