Какие методы кэширования, кроме файла или базы данных, доступны? - PullRequest
11 голосов
/ 07 августа 2008

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

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

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

Ответы [ 4 ]

2 голосов
/ 07 августа 2008

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

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

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

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

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

1 голос
/ 07 августа 2008

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

0 голосов
/ 16 сентября 2008

Если вы используете 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 голосов
/ 07 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...