Рубрики
Uncategorized

Объясните систему сцен с точки зрения принципа технологии кэширования PHP

Автор оригинала: David Wong.

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

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

Далее я представлю их одного за другим.

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

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

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

Код выглядит следующим образом:

заголовок(‘Истекает: ‘. gmdate(‘D, d M Y H:i:s’, время() + 3600). ‘GMT’);

Заголовок (“контроль кэша: Макс”);//действителен в течение 3600 секунд

Управление кэшем также может устанавливать следующие параметры:

Общедоступный: может быть кэширован всеми пользователями (браузер конечного пользователя/сервер CDN)

Личное: может быть кэшировано только браузером конечного пользователя

Нет кэша: не используйте локальный кэш

Нет хранилища: отключите кэширование данных

Кэш согласования Пользователь отправляет запрос на сервер, и сервер решает, следует ли использовать кэш клиента.

Код выглядит следующим образом:

$last_modify($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]);

если (время() – $last_modify < 3600) {

заголовок(‘Последнее изменение: ‘. gmdate(‘D, d M Y H:i:s’, $last_modify).’ GMT’);

заголовок(‘HTTP/1.1 304’);//Не изменен

выход;

}

заголовок(‘Последнее изменение: ‘. gmdate(‘D, d M Y H:i:s’).’ GMT’);

Влияние поведения пользователя при работе с кэшем Истекает Срок действия последней измененной адресной строки введите допустимый переход на страницу допустимое Новое окно допустимо Вперед/назад Допустимое обновление F5 недопустимо и допустимо Недопустимо Ctrl + F5 обновить данные кэша файлов Кэш файлов Кэширует данные с низкой частотой обновления и высокой частотой чтения в файлы.

Например, несколько мест в проекте используют данные о городах для трехуровневой привязки. Мы можем кэшировать данные о городе в файл (city_data. JSON). JS может прочитать файл напрямую, не запрашивая серверную часть.

Автоматизация всей CMS станции (система управления контентом), возможно, все с ней знакомы. Например, в ранних cms Dede и php статический HTML может быть установлен в фоновом режиме. Когда пользователи посещают веб-сайт, они читают статический HTML-код без запроса внутренней базы данных или интерфейса данных ajax, что ускоряет скорость загрузки веб-сайта.

Статический HTML имеет следующие преимущества:

Хорошо для SEO

Быстрое открытие страницы

Уменьшите нагрузку на сервер

Кэш CDN CDN (сеть доставки контента) сеть распространения контента.

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

Кэш в основном включает HTML, изображения, CSS, JS, XML и другие статические ресурсы.

Кэш NoSQL Memcached Кэш Memcached-это высокопроизводительный сервер кэша распределенной памяти.

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

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

Memcached поддерживает только данные типа K/V и не поддерживает постоянное хранилище.

Разница между Memcache и memcached

Memcached начинается с 0.2.0, требуется версия PHP.2.0, а для Memcache требуется версия PHP.3.

Окончательное время выпуска memcached-24 декабря 2018 года, а окончательное время выпуска Memcache-7 апреля 2013 года.

Memcached основан на libmemcached, а Memcache основан на расширении PECL.

Вы можете рассматривать memcached как обновление Memcache.

Руководство пользователя PHP memcached:

Руководство пользователя PHP memcached:

Memcached часто сравнивают с redis. Далее мы представим кэш redis.

Кэш Redis Redis-это высокопроизводительная база данных K/V.

Красный цвет в значительной степени компенсирует отсутствие кэшированного K/V хранилища, такого как список (связанный список), набор (набор), набор (упорядоченный набор), хэш (хэш). Он не только хранит данные в памяти, но и сохраняет их на диске, поддерживая синхронизацию “ведущий-ведомый”.

В целом, redis можно рассматривать как расширение memcached, которое является более тяжелым и мощным.

Redis в основном используется в повседневной работе.

Учебный веб-сайт Redis: http://www.redis.cn/

Кэш Mongodb Mongodb-это база данных, основанная на распределенном хранилище файлов. Написано на C + +.

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

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

Учебный веб-сайт Mongodb: http://www.mongodb.org.cn

Кэш веб-сервера Кэш Apache С помощью mod_expires вы можете указать время истечения срока действия кэша, а также кэшировать HTML, картинки, JS, CSS и т.д.

Откройте httpd.conf и откройте модуль:

Модули LoadModule expires_module/mod_expires .so

Укажите время истечения срока действия кэша:

expires_module> expires_module>

Срок годности истекает в

ExpiresByType текст/css A8640000

Приложение типа ExpiresByType/x-javascript A8640000

Приложение типа ExpiresByType/javascript A8640000

Срок годности: Введите текст/html A8640000

Тип изображения ExpiresByType/jpeg A8640000

Срок годности изображения/gif A8640000

Изображение типа ExpiresByType/png A8640000

Изображение типа ExpiresByType/значок x A8640000

Кэш Nginx Используйте параметр expire для указания времени истечения срока действия кэша, который может кэшировать HTML, изображения, JS, CSS и т.д.

Откройте nginx.conf:

//Возьмите фотографию в качестве примера:

Местоположение ~. (gif|jpg|jpeg|png|bmp|ico) ${добавить новое местоположение

корневой html;

Истекает 1D; указывает время кэширования

}

Вы также можете понять следующее: путь к кэш-серверу прокси и кэш-сервер прокси для установки кэша.

Код операции кэш-код операции (код операции) код операции.

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

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

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

Кэш APC APC (альтернативный кэш PHP) дополнительный кэш PHP.

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

APC может сократить время динамического анализа и компиляции PHP, чтобы PHP-скрипты могли выполняться быстрее.

Окончательное время выпуска расширения APC-2012-09-03.

Если вам интересно, вы можете узнать об этом. Официальное введение: http://php.net/manual/zh/book

eAccelerator eAccelerator:Кэш кода операции PHP.

Если вам интересно, вы можете узнать об этом. Официальное введение: http://eaccelerator.net/

XCache Xcache-это быстрый и стабильный буфер кода операции PHP.

Вы можете узнать об этом, если вам интересно. Официальное введение: http://xcache.lighttpd.net/

Резюме В этой статье в основном представлены кэш браузера, кэш файлов, кэш NoSQL, кэш веб-сервера, кэш кодов операций.

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

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

Какие еще кэши можно использовать, чтобы помочь нашему проекту?

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

Вот несколько вопросов к вам. Это просто отвлекающий маневр.

Когда кэширование используется в проектах, мы выбираем redis или memcached. Почему? Некоторые сценарии:

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

Используйте redis lpush, r pop или r push, pop напрямую.

//очередь

$redis->lpush(ключ, значение);

//исходящая очередь

$redis->rpop(ключ);

Memcached не имеет такой структуры данных.

2, Например, нам нужно хранить информацию о пользователе, идентификатор, имя, телефон, возраст, рост, как хранить?

Схема 1: ключ = > значение

Идентификатор ключевого пользователя

Значение (данные пользователя)

При запросе сначала извлеките ключ, а затем проанализируйте его с помощью JSON \.

Схема 2: хэш

Идентификатор ключевого пользователя

Хэш-ключ,

Хэш-ключ,

Хэш-ключ,

Хэш-ключ,

При запросе просто достаньте ключ.

//добавить

$$redis->hSet(ключ, хэш-ключ, значение);

$$redis->hSet(ключ, хэш-ключ, значение);

$$redis->hSet(ключ, хэш-ключ, значение);

//Редактор

$$redis->hSet(ключ, хэш-ключ, значение);

//запрос

$redis – > hgetall (ключ);//запрос всех атрибутов

$redis – > hget (ключ, хэш-ключ);//запрос свойства

Схема 2 лучше, чем схема 1.

3, Например, социальные проекты похожи на Sina Weibo, список фокусов персонального центра и список поклонников, двусторонний список фокусов, популярный Weibo и подписку на новости.

Можно использовать приведенную выше структуру данных, предоставленную redis.

4.Memcached хранится только в памяти, в то время как redis может быть сохранен в памяти или сохранен на диске.

Если данные в требовании необходимо сохранить, пожалуйста, выберите redis.

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

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

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

Редактирование данных: удалите кэшированные данные, измените данные в базе данных, а затем добавьте их в кэш.

Удаление данных: сначала удалите кэшированные данные, а затем удалите данные в базе данных.

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

Трудно гарантировать сильную согласованность, такую как согласованность транзакций, согласованность на определенный момент времени и окончательную согласованность.

Проанализируйте конкретные проблемы.

А как насчет проникновения в кэш? Пользователь запрашивает данные, которых нет в кэше, в результате чего запрос попадает непосредственно в базу данных.

1. Установите значение ключа с помощью правил. Сначала проверьте, соответствует ли ключ техническим требованиям.

2, Ограничение тока интерфейса, деградация и слияние, пожалуйста, изучите историю: https://istio.io/

3, Фильтр цветения.

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

А как насчет лавин? 1、 Мьютекс. Для восстановления индекса разрешается только один запрос. Другие запросы ждут завершения восстановления кэша и снова получают данные из кэша.