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

голоса
10

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

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

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

Задан 06/08/2008 в 23:21
источник пользователем
На других языках...                            


4 ответов

голоса
1

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

Ответил 06/08/2008 в 23:23
источник пользователем

голоса
2

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

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

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

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

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

Ответил 07/08/2008 в 01:46
источник пользователем

голоса
0

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

Ответил 07/08/2008 в 01:48
источник пользователем

голоса
0

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

Ответил 15/09/2008 в 22:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more