Какие методы кэширования, кроме использования в файле или базе данных, доступны?

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

Вопрос

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

  1. Сохраните кэш в файл
  2. Сохраните кэш в большом поле базы данных

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

Это было полезно?

Решение

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

  • Доступ к базе данных где вы кэшируете данные, сначала правильно настраивая свою СУБД, затем используя уровень для делегирования решения об обнаружении нескольких запросов к одним и тем же данным (с AdoDB например.)
  • Извлечение вычислений из циклов в коде таким образом, вы не вычисляете одно и то же значение несколько раз. Вот ваш третий способ:сохранение результатов в сеансе для пользователя.
  • Предварительная компиляция PHP-кода с расширением, подобным Кэш APC.Таким образом, вам не нужно компилировать один и тот же PHP-код для каждого запроса.
  • Страница, отправленная пользователю убедитесь, что вы устанавливаете правильные МЕТА-теги (делайте доброе дело для мира и не используйте ETL, по крайней мере, при абсолютной необходимости).;или, может быть, сделать динамические страницы полностью статичными (имея пакетный процесс, который генерирует HTML-страницы);или с помощью прокси-кэша, например Кальмар.
  • Предварительная выборка и под этим я подразумеваю все те возможности, которыми вы располагаете для улучшения пользовательского опыта, просто делая что-то, пока пользователь не смотрит в вашу сторону.Например, предварительная загрузка IMG-тегов в HTML-файл, настройка СУБД для предварительной обработки, предварительная обработка результатов, сохраняющих сложные вычисления в базе данных, и т.д.

Исходя из моего опыта, я бы поспорил с вами, что ваш код можно значительно улучшить, прежде чем мы начнем говорить о кэшировании.Рассмотрим, например, насколько хорошо структурирована навигация по вашему сайту и насколько хорошо вы контролируете взаимодействие с пользователями.Затем проверьте свой код с помощью такого инструмента, как XDebug.

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

Используйте простой инструмент, такой как ИЗлоу чтобы подсказать другие простые вещи для улучшения.Проверьте свой код еще раз в поисках возможностей для размещения логики в браузере (через JavaScript).

Другие советы

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

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

Если вы используете Apache, вы можете использовать mod_rewrite для статического кэширования ваших веб-страниц.Допустим, вы используете PHP, и у вас есть запрос на "/somepage.php".В вашем файле .htaccess вы помещаете следующее:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Если ваш кэш оказывается пустым, запрос обрабатывается вашим php-скриптом как обычно, так что теперь остается просто заставить ваш php-скрипт сохранить полученный html-код в кэше.Самый простой способ сделать это - использовать другое правило htaccess для добавления пары php-файлов end ко всем вашим php-запросам (это может быть хорошей идеей, а может и не быть, в зависимости от вашего приложения):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Тогда вы бы сделали что-то вроде этого:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

С некоторыми дополнительными регулярными выражениями в файле .htaccess мы, вероятно, могли бы также начать кэшировать запросы строки запроса, но я оставлю это как упражнение для читателя :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top