Memcached несколько результатов MySQL - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь настроить memcached для хранения результатов запроса, который извлекает все данные, которые будут отображаться на моей первой странице.Когда я использую memcached для одного результата, он работает нормально, но когда я устанавливаю запрос на «LIMIT 10» и извлекаю кеш, он все равно показывает только один результат, когда я var_dump.

Есть ли что-то, чего мне не хватает?Или я действительно могу хранить только одну строку за раз?

Мой основной синтаксис следующий (результат предполагает, что ключ был установлен):

$sql = "select * from active limit 10"; 
//create an index key for memcache
$key = md5('query'.$sql); 
$result = $memcache->get($key);
var_dump($result);

edit: добавлен весь код, с которым я пытаюсь работать

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 
$sql = "select * from active limit 10";

$key = md5('query'.$sql); 
$result = $memcache->get($key);

if($result == null) {
 $qry = mysql_query($sql) or die(mysql_error()." : $sql");

if(mysql_num_rows($qry)> 0) {
$result = mysql_fetch_object($qry);
echo "THIS IS NOT CACHE<br>";
var_dump($result);
//store it
$memcache->set($key,$result,0,10);
    }
}
else {
echo "this is cached<br>";
var_dump($result);
}

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вы используете:

$result = mysql_fetch_object($qry);

, который извлекает только одну запись из базы данных.

Что вам нужно сделать, это выполнить цикл и построить массив объектов:

while ($result[] = mysql_fetch_object($qry));

, который затем можно сериализовать и кэшировать.

Ваш код должен выглядеть примерно так:

...
if($result == null) {
  $qry = mysql_query($sql) or die(mysql_error()." : $sql");

  while ($result[] = mysql_fetch_object($qry));

  // cache it
  $memcache->set($key,serialize($result),0,10);
}
...
0 голосов
/ 03 ноября 2011

Вам нужно перебрать результаты, я бы порекомендовал это:

$cachedResults = $memcache->get($key);

if (!empty($cachedResults)) {
    var_dump(unserialize($cachedResults));
    exit;
}

$qry = mysql_query($sql) or die(mysql_error()." : $sql");

while ($row = mysql_fetch_object($qry)) {
    $results[] = $row;
}

$memcache->set($key, serialize($results));

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

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