Автор оригинала: David Wong.
Резюме
Кэш стал неотъемлемой частью проекта, это лучший способ повысить производительность, например, уменьшить сетевой ввод-вывод, уменьшить дисковый ввод-вывод и т.д., Чтобы скорость загрузки проекта стала быстрее.
Кэш может быть кэшем ЦП , кэшем памяти и кэшем жесткого диска, и разные скорости запросов к кэшу различны (кэш ЦП > кэш памяти > кэш жесткого диска).
Далее я представлю их одного за другим.
Кэш браузера
Браузер сохраняет запрошенную страницу в кэше клиента. Когда посетитель снова заходит на страницу, браузер может считывать данные непосредственно из клиентского кэша, что уменьшает доступ к серверу и ускоряет скорость загрузки веб-страницы.
Сильный кэш
Запрос, отправленный пользователем, напрямую получен из кэша клиента и не запрашивает сервер.
В соответствии с истекшими сроками действия и контролем кэша определите, следует ли использовать надежный кэш.
Код выглядит следующим образом:
header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600). ' GMT');
Header ("cache control: Max age = 3600"); // valid for 3600 secondsУправление кэшем также может устанавливать следующие параметры:
- Общедоступный: может быть кэширован всеми пользователями (браузер конечного пользователя/сервер CDN)
- Личное: может быть кэшировано только браузером конечного пользователя
- Нет кэша: не используйте локальный кэш
- Нет хранилища: отключить кэширование данных
Кэш переговоров
Пользователь отправляет запрос на сервер, и сервер решает, использовать ли клиентский кэш.
Код выглядит следующим образом:
$last_modify = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if (time() - $last_modify < 3600) {
header('Last-Modified: '. gmdate('D, d M Y H:i:s', $last_modify).' GMT');
header('HTTP/1.1 304'); //Not Modified
exit;
}
header('Last-Modified: '. 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: Учебный веб-сайт Redis:
Кэш Mongodb
Mongodb-это база данных, основанная на распределенном файловом хранилище. Написано на C + +.
Она направлена на предоставление масштабируемых высокопроизводительных решений для хранения данных для веб-приложений.
Mongodb-это продукт между реляционной базой данных и нереляционной базой данных. Он обладает самыми широкими функциями и больше всего похож на реляционную базу данных.
Учебный веб-сайт Mongodb: http://www.mongodb.org.cn
Кэш веб-сервера
Кэш Apache
используйте mod_expires , укажите время истечения срока действия кэша, который может кэшировать HTML, картинки, JS, CSS и т.д.
открывать |/httpd.conf , открыть модуль:
LoadModule expires_module modules/mod_expires.so
Укажите время истечения срока действия кэша:
#Open cache ExpiresActive on #CSS cache (8640000 seconds = 10 days) ExpiresByType text/css A8640000 #js cache ExpiresByType application/x-javascript A8640000 ExpiresByType application/javascript A8640000 #html cache ExpiresByType text/html A8640000 #Picture cache ExpiresByType image/jpeg A8640000 ExpiresByType image/gif A8640000 ExpiresByType image/png A8640000 ExpiresByType image/x-icon A8640000
Кэш Nginx
использовать истекает срок действия Параметр для указания времени истечения срока действия кэша. HTML, картинки, JS, CSS и т.д. Могут быть кэшированы.
открыть nginx.conf :
//Take the picture as an example:
Location ~ \ (gif|jpg|jepg|png|bmp|ico) ${add a new location
root html;
Expires 1D; specifies the cache time
}Вы также можете понять следующее: путь к кэшу прокси-сервера и кэш прокси-сервера для установки кэша.
Кэш кода операции
Код операции (код операции) код операции.
После запуска PHP-программы вся память будет немедленно освобождена. Все переменные в программе будут уничтожены. Каждый запрос будет переведен и выполнен, что приведет к снижению скорости.
Когда интерпретатор заканчивает анализ кода сценария, он генерирует промежуточный код, который может выполняться напрямую, также известный как код операции.
Цель кода операции-избежать повторной компиляции и снизить нагрузку на процессор и память.
Кэш APC
APC (альтернативный кэш PHP) дополнительный кэш PHP.
APC стремится предоставить бесплатную, открытую и надежную платформу для кэширования и оптимизации промежуточного кода PHP.
APC может сократить время динамического анализа и компиляции PHP, чтобы PHP-скрипты могли выполняться быстрее.
Окончательное время выпуска расширения APC-2012-09-03.
Если вам интересно, вы можете узнать об этом. Официальное введение: http://php.net/manual/zh/book…
ускоритель
eAccelerator:Кэш кода операции PHP.
Если вам интересно, вы можете узнать об этом. Официальное введение: http://eaccelerator.net/
XCache
Xcache-это быстрый и стабильный буфер PHP-кода.
Вы можете узнать об этом, если вам интересно. Официальное введение: http://xcache.lighttpd.net/
Резюме
В этой статье в основном рассматриваются кэш браузера, кэш файлов, кэш NoSQL, кэш веб-сервера, кэш кода операции.
Каждый вид кэша может быть подробно изучен, начиная с введения, установки, использования и краткого описания сценариев приложений.
Вы можете подумать о том, с помощью приведенного выше введения, какой кэш мы используем в нашей работе?
Какие еще кэши можно использовать, чтобы помочь нашему проекту?
Часто задаваемые вопросы о кэшировании
После использования кэша вы, должно быть, столкнулись с некоторыми проблемами головной боли, такими как согласованность данных, лавинообразность, кэш горячих данных, мониторинг кэша и т.д.
Вот несколько вопросов к вам. Это просто отвлекающий маневр.
Когда в проектах используется кэширование, мы выбираем redis или memcached. Почему?
Некоторые сценарии:
1. Например, чтобы реализовать простую функцию сбора журналов или отправить большое количество SMS-сообщений и функций электронной почты, метод реализации заключается в том, чтобы сначала собрать данные в очередь, а затем выполнить запланированную задачу для использования очереди и решения задач, которые необходимо выполнить.
Используйте redis lpush, r pop или r push, pop напрямую.
// queue $redis->lpush(key, value); // outgoing queue $redis->rpop(key);
Memcached не имеет такой структуры данных.
Например, нам нужно хранить информацию о пользователе, идентификатор, имя, телефон, возраст, рост, как хранить?
Схема 1: ключ = > значение
Ключ? Данные? Идентификатор пользователя
Значение (пользовательские данные)
При запросе сначала извлеките ключ, а затем проанализируйте его с помощью JSON \
Схема 2: хэш
Ключ? Данные? Идентификатор пользователя
Хэш-ключ,
Хэш-ключ,
Хэш-ключ,
Хэш-ключ,
При запросе просто достаньте ключ.
// add $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); // Editor $redis->hSet(key, hashKey, value); // query $redis->hGetAll(key); // query所有属性 $redis->hGet(key, hashKey); // query某个属性
Схема 2 лучше, чем схема 1.
3. Например, социальные проекты похожи на Sina Weibo, список фокусов персонального центра и список поклонников, двусторонний список фокусов, популярный Weibo и подписку на новости.
Можно использовать приведенную выше структуру данных, предоставленную redis.
4. Memcached хранится только в памяти, в то время как redis может храниться в памяти или сохраняться на диске.
Если данные в требовании необходимо сохранить, пожалуйста, выберите redis.
Memcached не используется в личной работе, и это лучше, чем redis, когда выделение памяти memcached получается путем запроса данных.
Memcached использует механизм выделения блоков для управления памятью по умолчанию. В соответствии с заданным размером выделенная память разделяется на блоки определенной длины для хранения соответствующей длины записей данных о значениях ключа, чтобы полностью решить проблему фрагментации памяти.
Как обеспечить согласованность данных между кэшем и базой данных?
Новые данные: сначала добавьте в базу данных, затем добавьте в кэш.
Редактирование данных: удалите кэшированные данные, измените данные в базе данных, а затем добавьте их в кэш.
Удаление данных: сначала удалите кэшированные данные, а затем удалите данные в базе данных.
Запрос данных: сначала запросите данные кэша, затем запросите базу данных, а затем добавьте ее в кэш.
Трудно гарантировать строгую согласованность, такую как согласованность транзакций, согласованность на определенный момент времени и окончательную согласованность.
Проанализируйте конкретные проблемы.
А как насчет проникновения в кэш?
Пользователь запрашивает данные, которых нет в кэше, в результате чего запрос попадает непосредственно в базу данных.
1. Установите обычное значение ключа и сначала проверьте, соответствует ли ключ спецификации.
II. Ограничение тока интерфейса, деградация и слияние, пожалуйста, изучите историю: https://istio.io/
III. фильтр блума.
4. Установите пустой кэш и время истечения срока действия для несуществующего значения ключа. Если уровень хранения создает данные, своевременно обновляйте кэш.
А как насчет лавин?
1. Взаимоисключающая блокировка, только одному запросу разрешается перестроить индекс, а другие запросы ожидают завершения восстановления кэша и снова получают данные из кэша.
2. Стратегия двойного кэша: исходный кэш и кэш копирования. Когда исходному кэшу не удается запросить кэш копирования, время сбоя исходного кэша устанавливается на короткий срок, а кэш копирования устанавливается на длительный срок.
Уже сейчас это чистое метание и превращение нефрита. В сочетании с вашей собственной ситуацией, конкретными проблемами, конкретным анализом.
Рекомендуемое чтение
- Объяснение системы Единый вход единого входа
- Системное объяснение – Защита веб-безопасности PHP
- Системное объяснение – проверка подписи интерфейса PHP
- Системное объяснение – высокоточная работа PHP с плавающей запятой
Добро пожаловать в эту статью, пожалуйста, укажите автора и источник, спасибо!
Оригинал: “https://developpaper.com/system-explanation-php-caching-technology/”