memcaching объекты ресурса php - PullRequest
       2

memcaching объекты ресурса php

0 голосов
/ 26 октября 2010

Скажем, у меня есть этот код в PHP:

$query = mysql_query("SELECT ...");

, оператор возвращает объект ресурса.Обычно он передается mysql_fetch_array () или одной из функций mysql_fetch_ * для заполнения набора данных.

Мне интересно, может ли объект resouce - переменная $ query в этом случае кэшироваться в memcache, а затем может быть извлечена и использована так же, как и в момент ее создания.

Я гуглил вопрос, не очень повезло.

Я спрашиваю, потому что это выглядит намного легче, чем способ "заполнить массив результатов сначала, а затем кешировать".

Так возможно ли это?

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Расширение Memcache сериализует объекты перед отправкой их на сервер Memcached.Как упоминалось в другом постере, ресурсы нельзя сериализовать.Ресурс - это, в основном, ссылка на сетевое соединение с сервером базы данных.Вы не можете кэшировать сетевое соединение и использовать его позже.Вы можете кэшировать только те данные, которые передаются по соединению.

При таких запросах вы должны извлекать все строки перед их кэшированием.

$all_results = array();
while ($row = mysql_fetch_array($query)) {
    $all_results[] = $row;
}
$memcache->set('query', $all_results);

Современные драйверы баз данных, такие как MySQLi и PDOесть функция fetch_all(), которая будет извлекать все строки.Это немного упрощает ситуацию.

Когда вы получите этот массив позже, вы можете просто использовать foreach() для его итерации.Это не работает с очень большими результатами запроса (Memcached имеет ограничение в 1 МБ), но в большинстве случаев у вас не должно быть проблем с ним.

2 голосов
/ 26 октября 2010

Я сомневаюсь в этом. Из сериализации ручного ввода

serialize () обрабатывает все типы, кроме типа ресурса.

Редактировать: Ресурсы, как правило, связаны с сервисом, который их создал. Я не знаю, использует ли memcached сериализацию, но я предполагаю, что на него будут распространяться те же ограничения.

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