PHP кеширование переменных - PullRequest
1 голос
/ 15 июля 2011

У меня есть некоторые данные в базе данных MySQL, которые большую часть времени являются статическими.Это в основном почти статические ценности, такие как города, штаты и этнические.Я хочу кэшировать их в переменной, предпочтительно в памяти, чтобы мне не приходилось выполнять новый запрос к MySQL при каждой загрузке страницы.

Проблема в том, что мой хостинг не поддерживает ни memcache, ниAPC.Единственный ускоритель, который я смог найти, - это eAccelerator, и я не думаю, что он будет делать то, что я имею в виду.

Есть ли способ кэширования?Это http://www.k -disk.net

Спасибо

Ответы [ 4 ]

4 голосов
/ 15 июля 2011

Кэширование является отличным примером повсеместного пространственно-временного компромисса в программирование. Вы можете сэкономить время, используя пространство для хранения результатов. [1]

Существует много способов реализации кэша на веб-сайте на многих уровнях. Давайте посмотрим на них, начиная с передней части и двигаясь к задней части, не вдаваясь в подробности.

HTTP-кэширование

См. Как оптимизировать ваш сайт с помощью HTTP-кэширования

Кэширование на уровне приложения

Это кэширование "дорогих для запроса" объектов базы данных. Например: memcache, кэширование страниц в файлах и т. Д.

Кэш оп-кода

Например: PHP-ускоритель, eAccelerator и т. Д.

Кэш уровня базы данных

Оптимизация базы данных путем настройки ее параметров в зависимости от потребностей и аппаратного обеспечения машины.

В вашем случае, я бы порекомендовал настроить my.cnf, поскольку при наличии достаточного количества оперативной памяти MySQL работает довольно быстро. Просто постарайтесь предварительно не оптимизировать.

2 голосов
/ 16 июля 2011

Вы можете использовать расширение Shared Memory.

Посмотрите этот базовый пример: http://www.php.net/manual/en/shmop.examples-basic.php

2 голосов
/ 15 июля 2011

Вы можете просто записать на свой сервер файл, который сохраняет сериализованный массив переменных php.Просто вставьте все свои переменные в ассоциативный массив, затем сериализуйте и сохраните.Хотя я, честно говоря, не понимаю, почему вы не сохраняете переменные в таблицу переменных в базе данных.Это не дорогая операция.

$myvars = array(
  'how_high_do_i_jump' => 10,
  'which_tv_show_is_best' => 'Glee',
  'enable_caching' => true,
  'mathematical_solution' => 4534.234
);

$file_str = serialize($myvars);

//Save the file
file_put_contents('myvars.ser', $myvars);

//To reverse just do this
$file = file_get_contents('myvars.ser');

$myvars = unserialize($file);

Если это не работает для вас, есть способ получить memcache на вашем общем хосте, если у вас есть доступ по SSH.Я действительно сделал это на hostmonster.Вот краткий обзор (хотя это не та статья, которую я изначально использовал).
http://andrewpeng.net/posts/2011/06/271273-memcached-and-dreamhost-shared-tutorial.html

0 голосов
/ 15 июля 2011

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

...