[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: memcached и mysql_fetch_array
freelancer89
Доброго времени суток.
Есть проблемка такая.

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$key = md5("SELECT * FROM items");
$result= mysql_query("SELECT * FROM items") or die(mysql_error());
$item = mysql_fetch_array($result);
$memcache->set($key, $item); // Хранить результат 100 секунд


проблема в том что при взятии кеша


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


Там находится одна первая запись, а не все записи таблицы.
Подскажите как решить проблему.



Спустя 6 минут, 40 секунд (5.07.2012 - 20:01) Игорь_Vasinsky написал(а):
while() - поможет те забить массив

Спустя 10 минут, 47 секунд (5.07.2012 - 20:12) freelancer89 написал(а):

$item = array();

$result= mysql_query("SELECT * FROM items") or die(mysql_error());

$item = mysql_fetch_array($result);

while($row = mysql_fetch_array($result))
{
$item[] = $row;
}

$memcache->set($key, $item);

Попробовал с While, при выводе все равно только первая позиция поторяется, может я не верно вывожу кэш?

Делаю это вот так


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


if ($cach_item ) {


while ($cach_item)
{
echo "<tr>";

echo "<td>";
echo $cach_item['name'];
echo "</td>";

echo "<td>";
echo $cach_item['price'];
echo "</td>";


echo "</tr>";

}


}


Спустя 19 минут, 36 секунд (5.07.2012 - 20:31) Игорь_Vasinsky написал(а):
$item = array();

$result= mysql_query("SELECT * FROM items") or die(mysql_error());

$item = mysql_fetch_array($result);

while($row = mysql_fetch_array($result))
{
echo '<pre>' . print_r($row, 1) . '</pre>';

}


все записи видишь?

Спустя 20 минут, 24 секунды (5.07.2012 - 20:52) freelancer89 написал(а):
ДА, все вижу.

Спустя 25 минут, 49 секунд (5.07.2012 - 21:18) Игорь_Vasinsky написал(а):
$cach_item = $memcache->get($key); 


echo '<pre>' . print_r($cach_item, 1) . '</pre>';


а так?

Спустя 4 минуты, 7 секунд (5.07.2012 - 21:22) freelancer89 написал(а):
А так только первую запись.

Спустя 5 минут, 10 секунд (5.07.2012 - 21:27) forza написал(а):
http://www.php.net/manual/en/memcached.setmulti.php

Multiset позволяет хранить массивы.
Простой set хранит $key=>$value (string)

Спустя 8 минут, 57 секунд (5.07.2012 - 21:36) freelancer89 написал(а):
На setMulti ругается

Fatal error:
Call to undefined method Memcache::setMulti()

Спустя 29 минут, 22 секунды (5.07.2012 - 22:05) freelancer89 написал(а):
Ага, я вот немного разобрался, есть Memcache а есть Memcached они немного отличаются друг от друга. В Memcached есть как раз setMulti, но все равно не получается то, что надо =(

Спустя 14 минут, 35 секунд (5.07.2012 - 22:20) Игорь_Vasinsky написал(а):
почему?

Спустя 6 минут, 44 секунды (5.07.2012 - 22:27) freelancer89 написал(а):
Теперь скрипт, вроде, добавляет массив в кеш, но не может его извлечь.






<?php

$memcache = new Memcached;
$memcache->addServer('127.0.0.1', 11211) or die ("Could not connect");
include 'connect.php';

$key = "3";

$item = $memcache->get($item);


if ($item ) {


while ($item)
{
echo "<tr>";

echo "<td>";
echo $cach_item['name'];
echo "</td>";

echo "<td>";
echo $cach_item['price'];
echo "</td>";


echo "</tr>";

}



}


else {

// Получить данные из базы и создать кэш
$item = array();
$result= mysql_query("SELECT * FROM items") or die(mysql_error());
while($row = mysql_fetch_array($result))
{
$item[] = $row;
}
//mysql_free_result($result);
$memcache->setMulti($item,300);
echo "Data Pulled from the Database";
}

?>


теперь скрипт всегда пишет только Data Pulled from the Database.
И в setMulti нет ключа получается по которому можно обратиться в кешу.
Получается если данные и попадают в кэш, не получается его использовать.

Спустя 8 минут, 30 секунд (5.07.2012 - 22:35) Игорь_Vasinsky написал(а):
Цитата
Список параметров
items
Сохраняемый массив пар ключей/значений.
expiration
Время хранения объекта, по умолчанию равно 0. Для более подробной информации смотрите Время хранения объекта.


$data = array('Данные', $items);
$memcache->setMulti($data,300);

print_r($data);

Спустя 4 минуты, 18 секунд (5.07.2012 - 22:39) freelancer89 написал(а):
сейчас это дает вывод такой:

Array ( [0] => Данные [1] => )

Спустя 11 минут, 21 секунда (5.07.2012 - 22:51) Игорь_Vasinsky написал(а):
погоди..я чёт на сонную голову туплю.


$data = $memcache->setMulti($item,300);


не?

Спустя 2 минуты, 6 секунд (5.07.2012 - 22:53) freelancer89 написал(а):
Тоже не то.

Спустя 6 минут, 54 секунды (5.07.2012 - 23:00) Игорь_Vasinsky написал(а):

Спустя 26 минут, 35 секунд (5.07.2012 - 23:26) forza написал(а):
Спакуха мужики -)
У человека установлен Memcache,а мультисет есть у Memcached.
Решение.
$item= serialize($array);
$memcache->set($key, $item);

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


или

$item = json_encode($array);
$memcache->set($key, $item);

$get = json_decode($memcache->get($key), true);

Спустя 19 часов, 14 минут, 17 секунд (6.07.2012 - 18:41) freelancer89 написал(а):
Опять таки, только первая запись в кеше(

Спустя 39 минут, 9 секунд (6.07.2012 - 19:20) vasa_c написал(а):
массив сохраняет обычный set().
setMulti() к этому не имеет отношения.

Спустя 53 минуты, 47 секунд (6.07.2012 - 20:14) freelancer89 написал(а):
с set только одна запись таблицы из кеша извлекается.

Спустя 3 минуты, 54 секунды (6.07.2012 - 20:17) inpost написал(а):
Ты слишком рано полез в кеширование данных...

Спустя 2 часа, 59 минут, 10 секунд (6.07.2012 - 23:17) Игорь_Vasinsky написал(а):
а чем сеариализация или ясон не подошел? должна быть строка - вот те строка.

Спустя 23 часа, 53 минуты, 59 секунд (7.07.2012 - 23:11) forza написал(а):
Цитата (Игорь_Vasinsky @ 6.07.2012 - 20:17)
а чем сеариализация или ясон не подошел? должна быть строка - вот те строка.

Все должно подходить. Тестил


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.