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

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

  1. Сохранить кеш в файл
  2. Сохраните кеш в большое поле БД

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

6.08.2008 22:21:55
Можете ли вы дать этому вопросу правильное название? Например, «Каковы лучшие методы кэширования данных?», «Какие методы кэширования, кроме файла или базы данных, доступны?» Или аналогичные.
Bobby Jack 14.10.2008 13:24:38
4 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

2
7.08.2008 02:02:32

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

1
6.08.2008 22:23:13

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

0
7.08.2008 00:48:53

Если вы используете 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 ко всем вашим запросам 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 мы, вероятно, могли бы также начать кэширование запросов строки запроса, но я оставлю это как упражнение для читателя :)

0
15.09.2008 21:28:30