Кэш стал неотъемлемой частью проекта, это лучший способ повысить производительность, например, уменьшить сетевой ввод-вывод, уменьшить дисковый ввод-вывод и т.д., Чтобы скорость загрузки проекта стала быстрее.
Кэш может быть кэшем процессора, кэшем памяти и кэшем жесткого диска, и разные скорости запросов к кэшу различны (кэш процессора лучше, чем кэш памяти, чем кэш жесткого диска).
Далее я представлю их одного за другим.
Кэш браузера Браузер сохраняет запрошенную страницу в кэше клиента. Когда посетитель снова посещает страницу, браузер может считывать данные непосредственно из клиентского кэша, что уменьшает доступ к серверу и ускоряет скорость загрузки веб-страницы.
Надежный кэш Запрос, отправленный пользователем, напрямую получен из клиентского кэша и не запрашивает сервер.
В соответствии с истекшим сроком действия и контролем кэша определите, следует ли использовать надежный кэш.
Код выглядит следующим образом:
заголовок(‘Истекает: ‘. 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、 Мьютекс. Для восстановления индекса разрешается только один запрос. Другие запросы ждут завершения восстановления кэша и снова получают данные из кэша.