Собственно сохраняемые данные в PHP-запросах - PullRequest
4 голосов
/ 25 июня 2011

Я хочу кэшировать некоторые данные через запросы PHP, а не извлекать их из базы данных во время каждого вызова.Данные применяются универсально, независимо от пользователя / сеанса.Какой самый легкий метод достижения этого?Я не могу гарантировать доступ для записи на диск или требовать APC.Есть ли способ добиться этого с помощью ванильного PHP?Спасибо!

Ответы [ 5 ]

11 голосов
/ 25 июня 2011

Есть 3 «пути», которые приходят мне на ум, когда вы спрашиваете об этом, но прежде чем подвести итог, позвольте мне сказать, что PHP не предназначен для того, чтобы делать то, что вы хотите. Не существует «универсальной» системы кеширования для запрашиваемых (или накопленных) данных. Однако вы можете сделать несколько вещей, чтобы ускорить загрузку страниц и запросы данных:

  1. Сеанс ( Требования: Поддержка файлов cookie для пользователя и запросы для каждого нового пользователя)
  2. Кэш-файл ( Требования: Доступ для записи на диск)
  3. Кэширование запроса ( Требования: Возможность кэширования запроса в MySQL)

Первые сеансы довольно очевидны, но вы должны использовать их только в том случае, если данные зависят от пользователя (если не пытаетесь избежать этого). Для кэширования файла вам понадобится доступ для записи, но это лучший способ для данных на всем сайте. Просто используйте либо сериализованные массивы (простой файл), либо данные XML, в зависимости от ваших потребностей. Последний - отличный способ ускорить запросы MySQL (если они всегда одинаковы и у вас нет прав на запись в систему). Вы можете кэшировать запрос в базе данных, используя cached select .

Как видите, все эти методы имеют свои преимущества и недостатки, но вы можете использовать их по своему усмотрению. Однако стоит отметить, что загрузка кэшированных данных из файла или сеанса требует времени, поэтому вам следует проверить, действительно ли кэширование ускоряет запросы!

2 голосов
/ 25 июня 2011

Существует много способов «кэширования», база данных может быть одним из них. Другой вариант, который вы можете попробовать - это XML-файлы, но все зависит от вашей конкретной проблемы.

1 голос
/ 25 июня 2011

PS:

Если вы хотите, чтобы ваш сайт работал хорошо, вы всегда должны попробовать установить APC.APC - это в первую очередь / 1003 * кэш-код , который значительно ускоряет ваш сайт, но ниже я все же попытаюсь дать вам несколько быстрых альтернатив.

redistogo.com

Redis - это расширенное хранилище значений ключей с открытым исходным кодом.Его часто называют сервером структуры данных, поскольку ключи могут содержать строки, хэши, списки, наборы и отсортированные наборы.

redistogo.com предлагает бесплатный сервер redis (FAST)с 5 МБ памяти.Затем вы можете просто использовать простой ванильный Redis-клиент, например, predis , чтобы подключиться к Redis-серверу и кэшировать ваши данные.

/ dev / shm

Есть ли способ добиться этого с помощью ванильного PHP?Спасибо!

Вы можете попробовать использовать Cache_Lite (библиотека Vanilla) и попытаться записать в / dev / shm (Общая память), но вам нужноLinux для этого.Страница введение показывает основную информацию.Если возможно, вы должны использовать cache_dir => '/dev/shm'

// Set a few options
$options = array(
    'cacheDir' => '/dev/shm',
    'lifeTime' => 3600
);

. Вы всегда можете / также использовать этот пакет для записи на диск (МЕДЛЕННО по сравнению с памятью), но он также кэширует и может ускорить ваш сайт.

0 голосов
/ 25 июня 2011

Чтобы иметь типичный системный / прикладной кэш, вам нужен либо доступ к записи файловой системы, либо доступ к чему-то вроде APC.

Единственный другой способ кеширования данных - установить его в сеанс для каждого пользователя,где, если сеансовый ключ «my-cache» не существует, получить из базы данных и установить для сеанса.Как и при использовании любого другого метода кэширования, вам также придется подумать о том, чтобы отключить кеш при обновлении данных и т. Д.

Совсем не идеально кэшировать данные приложения на стороне клиента, но если вам нужен кешгде параметры кэширования недоступны, тогда это ваш единственный вариант.

0 голосов
/ 25 июня 2011

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

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